1、
問題:react使用swiper3插件實現banner輪播,其中有個banner圖有個click點擊事件,而其他的是頁面跳轉。出現了一個問題:
就是向右滑動到該幀時的swiper,點擊時未觸發react的onClick方法。
參考文章地址:https://www.cnblogs.com/wuhairui/p/9343846.html
錯誤示范
組件初始化一個banner數組
render中渲染出輪詢banner,並給每個banner綁定一個onClick事件,傳入參數i
綁定的方法:點擊后執行彈出當前為第幾個banner
使用Swiper對象,初始化為輪播圖
照理來講,我們分別點擊這個swiper的每個banner應該會彈出1、2、1、2……的
但是實際上:
(點擊1、2兩圖時觸發了,但是點擊第3圖,click方法就沒生效了)
動態圖如下:
我們來分析一下原因吧:
首先,banner只有2個,照理應該是2個swiper-slide,
但是在初始化時使用了loop:true
便由swiper插件再復制生成了2個。因此有了4個
而新的2個slide是swiper插件生成的,並沒有綁定react的事件,所以點擊之后沒有觸發到事件。
怎么辦呢?其實這樣的效果已經無法完全使用react處理了。因為插件生成的swiper並不是虛擬dom了。
所以這里需要使用到部分的dom操作。然后和react連接起來。
來看看解決方案吧
數據一樣,第2圖中,我們在slide中加入一個屬性data-i,這個i就是我們之后要用到方法中參數
我們在初始化之后,給每個slide綁定一個click事件:
點擊后拿到之前綁定的i,表示當前點擊的是第幾個banner,然后再調用組件對象的click方法。
(這里的_this代表當前react組件對象,因為前面聲明了,這樣就又可以從dom操作回到react操作了)
2、
一般我們寫點擊事件 都習慣綁定在 標簽上 如圖
不過 如果結合swiper后 你會發現 swiper生成后 如果loop模式 那么 你上來想左滑動(也就是向前滑動,行為雖然不符合操作習慣)你會發現 圖片的點擊事件 是無效的
這是因為 swiper的無限輪播時會自動復制第一個和最后一個頁面進行輪播。但由於只復制頁面沒有復制點擊事件,此時我們用vue寫的點擊事件在頁面循環一周回來遇到復制的頁面時,點擊事件就會失效。
所以 我們只有利用new swiper時 去綁定點擊事件