Вопрос про апплет swiper
код
на официальном примере дайтеswiper
Добавленcurrent``bindchange``circular
добавилbutton``bindtap
для перехода на следующий
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}`)
}
})
Проблема 1: При ручном назначении текущего значения соединение и скольжение недействительны
Нажмите на следующий, давsetData
Изменятьswiper
изcurrent
значение, при переключении с последнего на первое, хотя установленноеcircular
, но это будет не эффект соединения и скольжения, а скольжение от хвоста до головы.
Вопрос 2: Привязанное текущее значение, скользящее, не меняется
Даваяswiper
изcurrent
границаthis.data.index
Действует значение по умолчанию, но при ручном скольжении ползунок не изменяется автоматически.this.data.index
ценность .
пройти черезbindchange
Печать можно увидеть.this.data.index
Значение никогда не изменяется.
Итак, на этот разcurrent
а такжеthis.data.index
не подходит.
Например: проведите пальцем вправо
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
в официальной документации
Если вы используете setData в функции обратного вызова события bindchange для изменения текущего значения, это может привести к непрерывному вызову >setData, поэтому не используйте его таким образом.
Если вы хотитеcurrent
а такжеthis.data.index
Для сравнения необходимо ещеbindchange
используется в функции обратного вызова события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
})
}
Вопрос 3: Контролируйте переключение значения тока, которое не совпадает с результатом скользящего кода переключения.
если взять вbindchange
используется в функции обратного вызова событияsetData
Изменятьcurrent
стоимость.
Нажмите на следующий: датьthis.data.index
Запускается после назначенияbindchange
в обратном вызове события,this.data.index
а такжеe.detail.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
При смахивании вручную:bindchange
в обратном вызове события,this.data.index
будет последнее значение
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