微信小程序swiper-dot中的點如何改成滑塊詳解

本文主要介紹如何基於已有的組件(比如微信小程序的swiper,還有我們平時h5用的比較多的swiper.js等),實現一個滑塊樣式的指示面板。demo基於小程序,但是邏輯通用。

背景

最近要做一個新的小程序,在首頁部分有一個swiper模塊,因為設計同學的出色發揮😭,讓我在枯燥的開發中得到瞭些許快樂。他們將swiper中指示面板中的點,改成瞭一個滑塊,說實話,老老實實整成一排點它不香麼,哈哈哈哈。但是我寵他~

目標效果

整體來看很簡單。主要是下邊的滑塊需要花一些功夫。整理需求之後需要實現的功能點如下:

  • 滑塊需要有一個自然的滑動效果。
  • 滑塊需要跟著滑動方向滑動。

思路

經過整理,實現方案如下:

  • 在滑動swiper的content的時候,我們可以獲取當前頁面的curPage(一般情況下組件都會提供當前頁),接著我們可以在滑動結束之後設置上一個頁面的prePage,這個prePage其實就是本次的curPage。通過這個page我們可以得到滑塊滑動的起始位置以及結束位置。
  • 滑動我們可以通過transform來實現。
  • 因為用瞭transform,所以我們需要小程序支持自定義style,但目前來看小程序提供瞭一套this.animate的方法。

實現

swiper監聽change

首先我們需要使用swiper的change事件,代碼如下:

<swiper
 class="hot-content-swiper"
 indicator-dots="{{indicatorDots}}"
 vertical="{{vertical}}"
 bindchange="sliderHandler">
 <block wx:for="{{popular_zone_list}}" wx:key="*this">
   <swiper-item>
     <view class="hot-list">
       這個是swiper{{index}}
     </view>
   </swiper-item>
 </block>
</swiper>

自定義dot模塊

其次,我們需要自定dot的DOM,也就是我們的滑塊區域,代碼如下:

<view class="dot">
 <view class="dot-bar" style="width: {{dotBarWidth}}rpx"></view>
</view>

這其中需要給我們的滑塊一個初始化的大小,不然滑動之後會有一個寬度變換的抖動,也就是dotBarWidth。

這個滑塊的大小是基於滑道的長度,以及swiper-item的數量來計算的。這樣子得到寬度之後我們隻要偏移滑塊寬度的倍數即可。

let dotWidth = 100;
let dotBarWidth = Math.round(dotWidth/popular_zone_list.length);

change事件中的邏輯

模板已經寫完瞭,那我們就開始寫change的事件,代碼如下:

sliderHandler({detail}) {
 let curPage = detail.current;
 let self = this;
 this.animate('.dot-bar', [
   {
     translateX: self.prePage * 100 + '%',
     transformOrigin: 'center',
   },
   {
     translateX: curPage*100 + '%',
     transformOrigin: 'center',
   },
 ], 100, function () { //animate的回調
   self.prePage = curPage;
   self.clearAnimation('.container', {
     translateX: true,
     transformOrigin: true
   });
 });
},
// 如果不是小程序,那麼this.animate這個換成動態綁定style,或者其他的DOM操作即可。

到此功能已經實現瞭,是不是發現這個功能還是很簡單的挺不錯的😒。

寫在最後

說實話,在實現的過程中,我有一些比較智障的行為,和當時的狀態有關吧,不知怎麼就過於關註在如何判斷滑塊是左滑還是右滑,導致繞瞭個路。但是其實基於結果去考慮發現,我們隻要計算起始和結束位置即可,左滑必定是開始位置大於結束位置的。希望以上方案能給大傢一些參考吧~🎉

到此這篇關於微信小程序swiper-dot中的點如何改成滑塊的文章就介紹到這瞭,更多相關微信小程序swiper-dot點改滑塊內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: