最近專案有個需求,要把詳情頁改成多個頁面輪播,本來小事一樁,但頁面上有多個谷歌的內容廣告時,呼叫谷歌的非同步程式碼,所有內容廣告會重疊到第一個slide的廣告區域,無奈改成iframe終於解決了,但是又引來了本次蛋疼的問題,slide無法滑動。
經過一番谷歌百度,無非兩種辦法抄來抄去
1、給iframe設定 CSS pointer-events: none
,
2、在iframe內監聽touch事件,根據手勢呼叫swiper的方法滑動
這兩種方法都存在問題
1、設定 pointer-events: none
,iframe頁面的事件都不會觸發
2、監聽iframe的touch事件判斷手勢,很麻煩,slide還不能隨手指滑動,體驗不好
難道就沒有更好的解決辦法了嗎?
只要思想不滑坡,辦法總比問題多
我們都知道,移動端touch事件是比click事件先觸發的,順著這個思路,我們可以給iframe設定 pointer-events: none
,在touchStart裡去掉,再在touchEnd裡恢復,不就可以解決不能點選的問題了麼?
const swiper = new Swiper(".swiper-container", {
on: {
touchStart(){
this.slides[this.activeIndex].querySelector("iframe").style.pointerEvents = "none";
},
touchEnd(){
// 由於touchEnd比click先觸發,所以要等click執行完以後,再恢復pointer-events
setTimeout(()=>{
this.slides[this.activeIndex].querySelector("iframe").style.pointerEvents = "auto";
}, 1000);
}
}
});
複製程式碼
swiper 4.5.0 安卓移動端測試OK