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

这里主要用到微信小程序提供的SelectorQuery获取页面节点信息实现,组件用的是微信小程序的scroll-view
逻辑就是获取右侧盒子的节点信息,获取右侧子分类的节点信息,当子分类滑动到顶部的之后,则切换左侧分类状态,而且当右侧子分类的位置处于触顶以及包含顶部位置的状态下,同样激活左侧分类状态。
view结构
左侧父级分类
<scroll-view
class="left"
scroll-y
>
<view
class="{{item.id == active ? 'left_current left_box' : 'left_box'}}"
wx:for="{{leftData}}"
wx:key="index"
bindtap="leftClick"
data-id="{{item.id}}"
>{{item.catName}}</view>
</scroll-view>
右侧子分类
<scroll-view
class="right"
scroll-y
scroll-into-view="{{'chunk'+ activeClassifyId}}"
scroll-with-animation
bindscroll="scroll"
>
<view
class="right_box"
wx:for="{{rightData}}"
wx:key="index"
id="{{'chunk'+ item.id}}"
>
<view class="right_title">{{item.name}}</view>
<view class="right_innerBox" wx:for-item="item2" wx:for="{{item.list}}" wx:key="index2" >
<view>{{item2.name}}</view>
</view>
</view>
</scroll-view>
css的部分大家自己按照需求写即可。
js部分
data:{
// ...数据...
active:'', // 左侧分类激活
activeClassifyId :'' // 滚动定位的id
}
// 左侧分类点击
leftClick(e){
// 当前分类id
let { id } = e.currentTarget.dataset
this.setData({
active:id, // 左侧激活的id
activeClassifyId : id // 分类定位的id
})
// activeClassifyId分类定位的id不应该和左侧激活的id是同一个,否则左侧激活会在下面的滚动事件内持续触发,导致无法滚动。
},
// 右侧滚动触发
scroll(){
let { rightData } = this.data
rightData.map(item=>{
if(item.list.length>0){
// 返回一个 SelectorQuery 对象实例。获取页面的节点信息。
const query = 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只需要在左侧父级分类点击的时候更新即可。
微信小程序分类菜单激活状态跟随列表滚动自动切换的更多相关文章
- 微信小程序里使用 Redux 状态管理
微信小程序里使用 Redux 状态管理 前言 前阵子一直在做小程序开发,采用的是官方给的框架 wepy , 如果还不了解的同学可以去他的官网查阅相关资料学习:不得不说的是,这个框架确相比于传统小程序开 ...
- 微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html
微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html 友情提示: 大家 ...
- 微信小程序分类的实现
微信小程序的分类功能思路 实现思路 1.把屏幕当成一个固定的盒子,然后把盒子分成两边,并让盒子的每一边都能够滚动. 2.通过将左侧边栏元素的id和右边内容的categoryId进行匹配,渲染展示相同i ...
- 微信小程序-自定义菜单导航(实现楼梯效果)
设计初衷 在开发页面时,往往需要实现,点击页面的导航菜单页面滚动到相应位置,滚动页面实现菜单选项的高亮.在html开发中,我们可以用到a标签锚点实现,jq的动画相结合实现类似效果.在框架中vant U ...
- 微信小程序API~检查登录状态
wx.checkSession(Object object) 检查登录态是否过期. 通过 wx.login 接口获得的用户登录态拥有一定的时效性.用户越久未使用小程序,用户登录态越有可能失效.反之如果 ...
- 【微信小程序】解决 竖向<scroll-view>组件 “竖向滚动页面出现遮挡”问题
问题图: 问题原因: <scroll-view class="scroll-container" upper-threshold="{{sortPanelDist} ...
- 微信小程序开发实战(1):使用滚动视图
本文主要介绍了滚动视图组件(scroll-view)的各种常用功能,例如,垂直和水平滚动.滚动事件等,并通过例子代码来演示这些功能的使用方法. 1. 垂直滚动视图 scroll-view是容器组件 ...
- 微信小程序—获取用户网络状态和设备的信息
这个是一个简易教程,按照他的步骤下载好了,打开界面看到的效果是如下的:
- 微信小程序——自定义菜单切换栏tabbar组件
效果图: wxml代码: <view class="top_tabbar" > <block wx:for="{{itemName}}" wx ...
- 微信小程序-----校园头条详细开发之列表展示数据
1.分类列表数据展示功能的实现 1.1 结构 1.2 代码实现 1.2.1 列表显示数据,.每次界面显示6条数据,发请求获取数据,动态存放 var app = getApp() Page({ dat ...
随机推荐
- 解决Qt5 mouseMoveEvent事件不能直接触发
问题描述 mouseMoveEvent 需要鼠标点击(左右中),然后在按下的同时移动鼠标才会触发 mouseMoveEvent事件函数. 解决 setMouseTracking(true);
- DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范式?
摘要:在未来,云上交付模式会逐步从Serverful为主转向Serverless为主. 本文分享自华为云社区<DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范 ...
- MySQL进阶实战3,mysql索引详解,上篇
一.索引 索引是存储引擎用于快速查找记录的一种数据结构.我觉得数据库中最重要的知识点,就是索引. 存储引擎以不同的方式使用B-Tree索引,性能也各有不同,各有优劣.例如MyISAM使用前缀压缩技术使 ...
- 【软考-中级-其他】03、NoSQL和云计算
其他 NoSQL概述 分类 文档存储数据库:MongoDB 采用BSON格式完成存储数据和网络数据交换 BSON格式:JSON的二进制编码格式 逻辑结构包括:数据库.集合(相当于关系数据库的表).文档 ...
- Node.js躬行记(25)——Web自动化测试
网页在提测流转给 QA 后,如何能帮他们更有效而准确的完成测试,是我一直在思考的一个问题. QA 他们会对网页编写测试用例,在提测之前会让我们将优先级最高的用例跑通,这在一定程度上能够避免频繁的返工, ...
- Django框架路由层-无名有名分组-无名有名分组反向解析
目录 一:路由层 1.路由匹配(错误演示) 2.路由匹配错误原因 3.路由匹配(解决方式1) 4.settings配置文件控制自动添加斜杠匹配 5.url方法第一个参数是正则表达式(正规使用url) ...
- STM32基本定时器控制LED闪烁代码
led.c #include "led.h" void LED_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2P ...
- Nmap脚本
Nmap的脚本默认存放在Nmap的安装路径的scripts文件夹下Nmap的脚本主要分为以下几类 Auth:负责处理鉴权证书(绕过鉴权)的脚本 Broadcast:在局域网内探查更多服务的开启情况,如 ...
- 微服务系列之服务监控 Prometheus与Grafana
1.为什么需要监控服务 监控服务的所属服务器硬件(如cpu,内存,磁盘I/O等)指标.服务本身的(如gc频率.线程池大小.锁争用情况.请求.响应.自定义业务指标),对于以前的小型单体服务来说,确实 ...
- Hello 2023 A-D
比赛链接 A 题意 给一个字符串每个物品对应的灯的照明方向,L/R 能照亮它左侧/右侧的所有物品(不包括自己对应的物品),现在能交换相邻两个灯一次(不改变照明方向),问能否找亮所有物品. 题解 知识点 ...