這里主要用到微信小程序提供的SelectorQuery
獲取頁面節點信息實現,組件用的是微信小程序的scroll-view
邏輯就是獲取右側盒子的節點信息,獲取右側子分類的節點信息,當子分類滑動到頂部的之后,則切換左側分類狀態,而且當右側子分類的位置處于觸頂以及包含頂部位置的狀態下,同樣激活左側分類狀態。愛掏網 - it200.com
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的部分大家自己按照需求寫即可。愛掏網 - it200.com
js部分
data:{
// ...數據...
active:'', // 左側分類激活
activeClassifyId :'' // 滾動定位的id
}
// 左側分類點擊
leftClick(e){
// 當前分類id
let { id } = e.currentTarget.dataset
this.setData({
active:id, // 左側激活的id
activeClassifyId : id // 分類定位的id
})
// activeClassifyId分類定位的id不應該和左側激活的id是同一個,否則左側激活會在下面的滾動事件內持續觸發,導致無法滾動。愛掏網 - it200.com
},
// 右側滾動觸發
scroll(){
let { rightData } = this.data
rightData.map(item=>{
if(item.list.length>0){
// 返回一個 SelectorQuery 對象實例。愛掏網 - it200.com獲取頁面的節點信息。愛掏網 - it200.com
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不能以數字開頭)。愛掏網 - it200.com設置哪個方向可滾動,則在哪個方向滾動到該元素bindscroll
:滾動時觸發的事件event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}createSelectorQuery
:返回一個 SelectorQuery 對象實例。愛掏網 - it200.com獲取頁面的節點信息。愛掏網 - it200.comselect
:獲取id的元素boundingClientRect
:獲取節點寬高信息和位置信息
說明
此處用到的是scroll-into-view
根據子分類的id動態定位到右側子分類位置,右側子分類在滾動的時候,會判斷條件,如果當前子分類展示的這一欄觸頂或者處于正在展示的位置(包含頂部),更新父級分類。愛掏網 - it200.com
注意
左側分類的高亮active不能和滾動定位的activeClassifyId共用,否則右側滾動的時候會持續更新active
導致右側無法滾動,activeClassifyId
只需要在左側父級分類點擊的時候更新即可。愛掏網 - it200.com