当前位置: 首页 > Web前端 > HTML

微信小程序的分类菜单的激活状态跟随列表的滚动自动切换

时间:2023-03-28 13:38:29 HTML

这里微信小程序提供的SelectorQuery主要用于获取页面节点信息。组件使用微信小程序的scroll-view逻辑获取右侧框的节点信息,获取右侧子类的节点信息,当子类滑动到顶部时,切换左侧的状态类目,当右侧子类目位置处于触顶含顶状态时,左侧也为激活分类状态。view结构左父级分类{{item.catName}}}右侧子分类{{item.name}}{{item2.name}}css部分可以根据自己的需要来写。js部分data:{//...data...active:'',//为左分类激活activeClassifyId:''//滚动定位id}//为左分类左击leftClick(e){//当前分类idlet{id}=e.currentTarget.datasetthis.setData({active:id,//左边激活的idactiveClassifyId:id//分类定位的id})//activeClassifyId分类定位的id不能和leftactivation的id相同,否则leftactivation下面的scroll事件会一直触发,导致不滚动。},//向右滚动触发scroll(){let{rightData}=this.datarightData.map(item=>{if(item.list.length>0){//返回一个SelectorQuery对象实例。获取页面的节点信息。constquery=wx.createSelectorQuery()query.select('#chunk'+item.id)//获取id为chunkID的元素。boundingClientRect(ref=>{//获取节点宽高信息和位置信息//如果当前子类滚动到顶部且当前子类在顶部位置if(0>ref.top&&ref.top>(ref.height*-1)){this.setData({active:item.id})//切换左边父类的高亮}}).exec()}})},属性解释:scroll-with-animation:设置滚动条位置时使用动画过渡scroll-into-view:取值为子元素id(id不能以数字开头)。设置向哪个方向滚动,向哪个方向滚动到元素bindscroll:滚动时触发的事件event.detail={scrollLeft,scrollTop,scrollHeight,scrollWidth,deltaX,deltaY}createSelectorQuery:返回一个SelectorQuery对象实例。获取页面的节点信息。select:获取id的元素boundingClientRect:获取节点的宽高信息和位置信息注意这里使用了scroll-into-view,根据子分类的id动态定位右侧子分类的位置。右侧子分类滚动时,会判断条件,如果当前子分类显示的列触及顶部或在显示的位置(包括顶部),则更新父分类。注意==左边类别的高亮active不能和滚动定位activeClassifyId==共享,否则右边滚动时active会不断更新,右边无法滚动。activeClassifyId只需要在点击左侧的父分类时更新。能。