關(guān)于小程序swiper的問(wèn)題代碼
在官方示例上給swiper添加了current``bindchange``circular index.wxml <swiper indicator-dots="{{indicatorDots}}" bindchange="swiperChange" current="{{index}}" circular="true" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}"> <block wx:for="{{imgUrls}}"> <swiper-item> <image src="{{item}}" class="slide-image" width="355" height="150"/> </swiper-item> </block> </swiper> <button bindtap="changeIndicatorDots"> indicator-dots </button> <button bindtap="changeAutoplay"> autoplay </button> <button bindtap="nextSwiper"> 下一張 </button> <slider bindchange="intervalChange" show-value min="500" max="2000"/> interval <slider bindchange="durationChange" show-value min="1000" max="10000"/> duration index.js /** * create by ZenoTian */ Page({ data: { imgUrls: [ 'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg' ], indicatorDots: false, autoplay: false, interval: 5000, duration: 1000, index: 2 }, changeIndicatorDots: function(e) { this.setData({ indicatorDots: !this.data.indicatorDots }) }, nextSwiper: function (e) { let {index} = this.data index === 2 ?index = 0 :index++ console.log(`下一張:${index}`) this.setData({ index }) }, changeAutoplay: function(e) { this.setData({ autoplay: !this.data.autoplay }) }, intervalChange: function(e) { this.setData({ interval: e.detail.value }) }, durationChange: function(e) { this.setData({ duration: e.detail.value }) }, swiperChange: function (e) { console.log('bindchange事件', `this.data.index:${this.data.index} e.detail.current:${e.detail.current}`) } }) 問(wèn)題1:手動(dòng)賦值current值,銜接滑動(dòng)無(wú)效點(diǎn)擊下一張,通過(guò)給setData改變swiper的current值,在從最后一張切換至第一張時(shí),雖然設(shè)置了circular,但是不會(huì)有銜接滑動(dòng)的效果,而是從尾部一路溜到了頭。 問(wèn)題2:綁定的current的值,滑動(dòng)并不會(huì)改變
通過(guò)給swiper的current綁定了this.data.index 例如:向右滑動(dòng) bindchange事件 this.data.index:2 e.detail.current:1 bindchange事件 this.data.index:2 e.detail.current:0 bindchange事件 this.data.index:2 e.detail.current:2 bindchange事件 this.data.index:2 e.detail.current:1 bindchange事件 this.data.index:2 e.detail.current:0 在官方文檔中
如果想讓current和this.data.index對(duì)照,還是需要在bindchange 的事件回調(diào)函數(shù)中使用setData改變current值。 swiperChange: function (e) { console.log('bindchange事件',`this.data.index:${this.data.index} e.detail.current:${e.detail.current}`) this.setData({ index: e.detail.current }) } 問(wèn)題3:控制current的值切換,與滑動(dòng)切換代碼結(jié)果不一樣
如果采取了在bindchange 的事件回調(diào)函數(shù)中使用setData改變current值。 下一張:0 bindchange事件 this.data.index:0 e.detail.current:0 下一張:1 bindchange事件 this.data.index:1 e.detail.current:1 下一張:2 bindchange事件 this.data.index:2 e.detail.current:2 下一張:0 bindchange事件 this.data.index:0 e.detail.current:0 下一張:1 bindchange事件 this.data.index:1 e.detail.current:1 手動(dòng)滑動(dòng)時(shí):bindchange事件回調(diào)中的,this.data.index的值會(huì)是上一次的值 bindchange事件 this.data.index:2 e.detail.current:1 bindchange事件 this.data.index:1 e.detail.current:0 bindchange事件 this.data.index:0 e.detail.current:2 bindchange事件 this.data.index:2 e.detail.current:1 bindchange事件 this.data.index:1 e.detail.current:0 |