最近做項(xiàng)目遇到了vue-awesome-swiper在loop模式下點(diǎn)擊失效問題蓉坎,經(jīng)過多番嘗試澳眷,找到了比較好的解決方式,記錄下來蛉艾,希望能幫助更多的朋友越過這些坑钳踊,話不多說,上干貨勿侯;
1.出現(xiàn)點(diǎn)擊失效的原因:在loop模式下拓瞪,超出實(shí)際數(shù)量的輪播項(xiàng)實(shí)際上是被復(fù)制出來的,是swiper虛擬slide進(jìn)行填充助琐,對這些虛擬slide元素進(jìn)行操作無效祭埂。
2.明白了原因,那我們?nèi)ソ鉀Q兵钮,點(diǎn)擊的方法不在元素上綁定蛆橡,而是在options上,例如:
swiperOption = {
? ? loop: true,
????onlyExternal: true,
? ????on: {
? ? ? ? ? ? ? ? click: v => {
? ? ? ? ? ? ? ? ? const id = v.target.getAttribute('data-id') // 獲取綁定的自定義屬性值id
? ? ? ? ? ? ? ? ? ? condole.log(id)
? ? ? ? ? ? ? ? }
? ? ? ? ? },
}
PS:
1.可以看到矢空,我使用的自定義屬性的辦法將需要的數(shù)據(jù)存到自定義屬性上航罗,這是最直接有效的方式,但切記這里的this指向的是swiper實(shí)例,要賦值的時(shí)候注意
2.因?yàn)辄c(diǎn)擊事件獲取到的是實(shí)際點(diǎn)擊的元素屁药,建議 slide內(nèi)的所有元素都加上自定義屬性粥血,以便不管任何 slide的點(diǎn)擊位置都能獲取得到綁定的數(shù)據(jù), 這點(diǎn)很重要!8纯鳌趾娃! 這點(diǎn)很重要!5抻抬闷! 這點(diǎn)很重要!8弧笤成!