通過獲取scroll-view及scroll-item的DOM相關(guān)信息,寫一個根據(jù)內(nèi)容自動滑動的tab欄
WXML
<view class="box">
<view class='classify'>
<scroll-view class="classify_scroll" scroll-left="{{srcollLeftDistance}}" enable-flex scroll-with-animation scroll-x>
<block wx:key="id" wx:for="{{classify_list}}">
<view data-index="{{index}}" class="classify_item {{currentIndex == index?'active':''}}" bind:tap="tapScrollItem">
{{item.classifyName}}
</view>
</block>
</scroll-view>
<swiper circular current="{{currentIndex}}" class="swiper_box" duration="300" bindchange="slideChange">
<swiper-item class="swiper_item">1</swiper-item>
<swiper-item class="swiper_item">2</swiper-item>
<swiper-item class="swiper_item">3</swiper-item>
<swiper-item class="swiper_item">4</swiper-item>
<swiper-item class="swiper_item">5</swiper-item>
<swiper-item class="swiper_item">6</swiper-item>
<swiper-item class="swiper_item">7</swiper-item>
<swiper-item class="swiper_item">8</swiper-item>
<swiper-item class="swiper_item">9</swiper-item>
</swiper>
</view>
</view>
WXSS
.box {
height: 100vh;
}
.classify_scroll {
box-sizing: border-box;
padding: 0 20rpx;
border-bottom: 1px solid #e6e6e6;
width: 100vw;
white-space: nowrap;
display: flex;
height: 70rpx;
}
.classify_scroll .classify_item {
padding: 15rpx 26rpx;
display: inline-block;
position: relative;
}
.classify_scroll .classify_item.active {
color: red;
}
.classify_scroll .classify_item.active::after {
position: absolute;
content: "";
height: 4rpx;
background-color: red;
width: 100%;
bottom: 0;
left: 0;
}
.swiper_box {
margin-top: 10rpx;
border: 1rpx solid #e9e9e9;
}
JS
Page({
data: {
classify_list: [
{ id: 0, classifyName: '生鮮' },
{ id: 1, classifyName: '零食' },
{ id: 2, classifyName: '糧油' },
{ id: 3, classifyName: '奶粉' },
{ id: 4, classifyName: '蔬菜' },
{ id: 5, classifyName: '肉類' },
{ id: 7, classifyName: '禽蛋' },
{ id: 8, classifyName: '手機' },
{ id: 9, classifyName: '家電' }
],
currentIndex: 0,
srcollLeftDistance: 0,
viewWidth: 0
},
onLoad () {
//獲取scrollItemDomList
wx.createSelectorQuery().selectAll('.classify_item').boundingClientRect().exec(rect => this.setData({ scrollItemDomList: rect[0] }))
//獲取屏幕寬度
wx.createSelectorQuery().selectViewport().boundingClientRect().exec(rect => this.setData({ viewWidth: rect[0].width }))
},
//點擊scrollItem
tapScrollItem(e) {
if (e.currentTarget.dataset.index !== this.data.currentIndex) return this.setData({ currentIndex: e.currentTarget.dataset.index })
},
//滑動swiperItem
slideChange(e) {
this.setData({ currentIndex: e.detail.current, srcollLeftDistance: this.data.scrollItemDomList[e.detail.current].left - this.data.viewWidth / 2 })
}
})
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。