前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue系列教程之微商城项目|分类

vue系列教程之微商城项目|分类

作者头像
算法与编程之美
发布2020-12-29 11:09:53
6.3K0
发布2020-12-29 11:09:53
举报
文章被收录于专栏:算法与编程之美

描述

本文需要实现的页面如下,点击左侧导航栏按钮,右侧自动滑动到对应位置。当滑动右侧内容,左侧导航栏也要做出相应变动。

准备工作

下载better-scroll

cnpm install better-scroll -S

引入vant-ui的侧边导航栏组件

main.js中新增以下代码

静态布局

顶部导航栏引入

fenlei.vue

引入侧边导航栏

结构大致如下,需要content-style占满屏幕中剩余的空间,也就是除去顶部和底部导航栏的空间.

fenlei.vue

请求数据

network/request.js中追加以下内容

在fenlei.vue中引入请求函数,并在created函数中请求数据,保存到goods属性中.

请求数据(res.data)结构如下

name为分类名称,需要放入侧边导航栏。sub为该分类对应的商品分类列表.

遍历goods数组,将每个元素的name放入侧边导航栏的元素中 fenlei.vue

</div>

右侧商品分类列表

借助在主页中使用过的vant-ui的宫格布局快速实现相应布局和样式.

这样就完成了相应的静态布局,但无法实现内容滚动效果。如果将overflow:hidden;属性取消,多出的内容就会溢出屏幕.

内容滚动

需要内容滚动的区域有左侧导航栏和右侧商品分类列表,需要分开处理。

1.给content-lefr和content-right添加ref,方便获取该元素.

2.通过ref获取content-left和content-right元素,将其初始化为better-scroll滚动模块.

需要注意的是:better-scroll必须要在需要滚动的内容元素渲染完成之后再初始化,否则无法正常使用.

在该页面中,需要等待content-left内的导航栏和content-right中的商品分类列表,渲染完毕之后再进行better-scroll的初始化.

那我们如何确保这两部分的内容已经渲染完毕呢?

一般的方法是,再请求到goods后,页面会自动进行动态更新,因为数据已经进行了双向绑定,而我们可以等待个一两秒之后再进行初始化.

但这样做显然不是很友好,如果用户网速快,那么就需要多等待一段时间才能正常使用页面,如果用户网速比较慢,那仍然无法保证此时页面元素已经渲染完成。

所以更好的方式是通过this.$nextTick()函数,该函数可以确保在当前正在渲染的元素渲染完毕之后再执行其中的代码。

但这样做better-scroll可能仍然无法正常运行,因为页面渲染是迟与js代码的,this.goods=res.data执行完之后,页面中很有可能还有其他元素在渲染,那this.$nextTick就会等待这些元素渲染完,而不是等待goods相关的元素渲染完成之后再执行.

为了确保是在goods相关的元素渲染完之后再执行this.nextTick,需要借助watch来完成,通过watch监听goods数据的变化和页面渲染,确保this.nextTick是在goods相关的元素渲染完之后执行.

初始化better-scroll的代码封装到methods的initScroll函数中,因为后面会多次对better-scroll进行初始化.

滚动联动

介绍

better-scroll提供了快速制作索引列表的模块,它将滚动容器中的父元素视为列表,把该父元素中的子元素视为列表项,通过给定对应的列表项下标,即可滚动到对应的子元素.

使用方法

在better-scroll初始化时给定wheel对象.

while对象的属性介绍

selectedIndex:默认显示滚动内容中的第几个子元素

wheelWrapperClass:需要绑定的父元素的类名,一般是better-scroll中的根元素

wheelItemClass:需要绑定的子元素的类名

this.scroll2.on('scrollEnd',()=>{}):滚动结束后触发

可以通过this.scroll2.getSelectedIndex()获取当前显示的子元素的索引.

联动思路

通过监听'scrollEnd'事件,获取当前显示的子元素的索引,奖其赋值给this.activeKey,因为this.activeKey与左侧导航栏动态绑定,这样就完成了滚动右侧内容,左侧导航栏随之变化的效果。通过vant-ui文档可知,当前选中的导航栏元素下标与this.activeKey动态绑定,再通过组件的@change监听导航栏点击事件,每次点击重新初始化右侧的better-scroll对象,将this.activeKey赋值给wheel中的selectedIndex属性,就完成了点击左侧导航按钮,右侧自动滚动到对应内容.完整代码如下

fenlei.vue

注意事项

1.better-scroll对象必须在dom元素渲染完之后再进行初始化,否则无法正常使用.

2.better-scroll对象必须有固定的高度.

本篇文章是该系列文章中的第九篇,讲述的是导航栏组件封装的相关操作步骤。下篇系列文章之导航栏与页面绑定正在制作之中,各位粉丝敬请期待。

实习编辑:李欣容

稿件来源:深度学习与文旅应用实验室(DLETA)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档