一. 基本思路及注意事项
- 左侧右侧独立布局,使用
scroll-view标签表格,开启scroll-y属性,设置scroll-into-view="{{'a'+foodFlag}}"
- 设置
kindFlag,以此判断动态类名逻辑,实现高亮
- 设置
foodFlag,以此判断右侧信息模块,实现模块滑动
- 左侧通过
kindFlag,定义左侧点击事件bindtap="tabKind",传递参数,修改kindFlag,实现右侧跳转指定类目
- 右侧定义
bindscroll="scrollList"事件,通过wx.createSelectorQuery()获取信息盒子位置数组
- 重构数组,判定下滑上滑临界值,修改
kindFlag,实现滑动控制高亮显示
- 注意 滑动事件
kindFlag需要转换为数字 否则会出现滑动失效问题
二. 代码注释详解
1. onLoad获取元素位置信息
- 在onLoad中获取保存临界值
- 注意要在页面构建之后进行,否则无法获取
onLoad(options) {
const query = wx.createSelectorQuery()
// 获取所有.foodList元素位置信息的数组
query = query.selectAll('.foodList').boundingClientRect()
query.exec((res) => {
// 重构为只包含距离顶部高度的数组并保存
this.setData({
tops: res[0].map(item => item.top)
})
})
}
2. 左侧点击事件
tabKind(e) {
this.setData({
foodFlag: e.currentTarget.id,
kindFlag: e.currentTarget.id,
})
},
3. 右侧滚动事件
scrollList(e) {
let {
scrollTop
} = e.detail
let kindFlag = Number(this.data.kindFlag)
if (scrollTop + 200 > this.data.tops[kindFlag + 1]) {
if (kindFlag < this.data.tops.length - 2) {
kindFlag++
} else {
kindFlag = this.data.tops.length - 2
}
this.setData({
kindFlag: kindFlag
})
}
if (scrollTop - 20 <= this.data.tops[kindFlag - 1]) {
if (kindFlag > 0) {
kindFlag--
} else {
kindFlag = 0
}
this.setData({
kindFlag: kindFlag
})
}
},