小程序獲取DOM(2)實戰(zhàn)

通過獲取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ù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容