微信小程序swiper-dot中的點如何改成滑塊詳解
本文主要介紹如何基于已有的組件(比如微信小程序的swiper,還有我們平時h5用的比較多的swiper.js等),實現(xiàn)一個滑塊樣式的指示面板。demo基于小程序,但是邏輯通用。
背景
最近要做一個新的小程序,在首頁部分有一個swiper模塊,因為設計同學的出色發(fā)揮😭,讓我在枯燥的開發(fā)中得到了些許快樂。他們將swiper中指示面板中的點,改成了一個滑塊,說實話,老老實實整成一排點它不香么,哈哈哈哈。但是我寵他~
目標效果
整體來看很簡單。主要是下邊的滑塊需要花一些功夫。整理需求之后需要實現(xiàn)的功能點如下:
- 滑塊需要有一個自然的滑動效果。
- 滑塊需要跟著滑動方向滑動。
思路
經過整理,實現(xiàn)方案如下:
- 在滑動swiper的content的時候,我們可以獲取當前頁面的curPage(一般情況下組件都會提供當前頁),接著我們可以在滑動結束之后設置上一個頁面的prePage,這個prePage其實就是本次的curPage。通過這個page我們可以得到滑塊滑動的起始位置以及結束位置。
- 滑動我們可以通過transform來實現(xiàn)。
- 因為用了transform,所以我們需要小程序支持自定義style,但目前來看小程序提供了一套this.animate的方法。
實現(xiàn)
swiper監(jiān)聽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,也就是我們的滑塊區(qū)域,代碼如下:
<view class="dot"> <view class="dot-bar" style="width: {{dotBarWidth}}rpx"></view> </view>
這其中需要給我們的滑塊一個初始化的大小,不然滑動之后會有一個寬度變換的抖動,也就是dotBarWidth。
這個滑塊的大小是基于滑道的長度,以及swiper-item的數(shù)量來計算的。這樣子得到寬度之后我們只要偏移滑塊寬度的倍數(shù)即可。
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這個換成動態(tài)綁定style,或者其他的DOM操作即可。
到此功能已經實現(xiàn)了,是不是發(fā)現(xiàn)這個功能還是很簡單的挺不錯的😒。
寫在最后
說實話,在實現(xiàn)的過程中,我有一些比較智障的行為,和當時的狀態(tài)有關吧,不知怎么就過于關注在如何判斷滑塊是左滑還是右滑,導致繞了個路。但是其實基于結果去考慮發(fā)現(xiàn),我們只要計算起始和結束位置即可,左滑必定是開始位置大于結束位置的。希望以上方案能給大家一些參考吧~🎉
到此這篇關于微信小程序swiper-dot中的點如何改成滑塊的文章就介紹到這了,更多相關微信小程序swiper-dot點改滑塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
論Bootstrap3和Foundation5網格系統(tǒng)的異同
這篇文章主要介紹了Bootstrap3和Foundation5網格系統(tǒng),網格的基本構造,如何構建的,描述它們的主要部件,以及它們對不同屏幕的大小表現(xiàn)出的差異,感興趣的小伙伴們可以參考一下2016-05-05Javascript動態(tài)綁定事件的簡單實現(xiàn)代碼
Javascript事件綁定的方法很多,很靈活。不過,作為比較簡單的動態(tài)綁定,下面的代碼看似正確,但得不到預期的效果。2010-12-12