摘要:問題最近在用寫端項目時發現個問題,的橫向滑動和瀏覽器的橫向滑動翻頁效果出現了沖突。思路我們雖然不能禁止瀏覽器的跳轉操作,但是我們可以阻止滑動元素觸發的所有默認事件啊。
問題:
最近在用vue寫m端項目時發現個問題,better-scroll的橫向滑動和UC瀏覽器的橫向滑動翻頁效果出現了沖突。
簡單的說,就是滑動scroll組件的時候也會觸發UC瀏覽器自帶的翻頁效果。
為此在網上找了不少資料,目前網上出現最多的解決方案是使用history.pushState(),使用監聽事件,監聽到跳頁事件(popstate)時,手動填充路徑為當前頁面地址。
示例代碼如下(引用):
history.pushState(null, null, document.URL);
window.addEventListener("popstate", function () {
history.pushState(null, null, document.URL);
});
但是我個人在使用的時候發現了另外一個問題,這個代碼不太符合我的需求場景,我只需要在scroll橫向滑動禁止翻頁,這個代碼相當于將所有跳頁操作禁止了。
于是我在這個基礎上做了些一點改動,首先監聽滑塊的滑動,然后在滑塊滑動的時候再去調用history.pushState,這樣在scroll滑動的時候就阻止了UC瀏覽器的默認翻頁。但是這樣又引發另外一個問題,瀏覽器history的前進和后退是依靠的是瀏覽歷史的隊列,調用 history.pushState(null, null, document.URL) 就相當于往當前隊列插入了一個當前頁的歷史記錄。這樣的話,每次使用瀏覽器自帶的前進后退功能的時候都需要連續觸發很多次才能跳出當前頁,這樣對于用戶來說顯然是不合理的。
我們雖然不能禁止瀏覽器的跳轉操作,但是我們可以阻止滑動元素觸發的所有默認事件啊。然后只需要判斷在什么時候去阻止默認事件以及恢復默認事件就好了。然后也不會影響點擊等操作。
代碼(基于vue):往滑塊的html結點上掛載觸摸事件
往data上掛載數據
data() { return { isTouchMove: true, startX: 0, startY: 0, endX: 0, endY: 0, isPreventDefault:false }; }
mounted上掛載觸摸執行事件
methods: { touchStart(e){ // 獲取初始位置 this.startX = e.touches[0].clientX; this.startY = e.touches[0].clientY; // 記錄是否進入過touchMove this.isTouchMove = true; }, touchMove(e){ // 如果是UC瀏覽器 并且第一次滑動執行時 if (this.isTouchMove && this.isUC()) { this.endX = e.touches[0].clientX; this.endY = e.touches[0].clientY; // 判斷滑動方向 橫向 | 垂直 if (Math.abs(this.endX - this.startX) > Math.abs(this.endY - this.startY)) { // 如果滑動為橫向,那么禁止所有默認事件 // 必要!否則會影響縱向頁面的滾動 e.preventDefault() // 用來輔助判斷是否已經禁止過默認事件 this.isPreventDefault = true; } // 關閉處理邏輯 touchMove連續觸發就沒必要再進來了 this.isTouchMove = false; } }, touchEnd(e){ // 如果已經禁止過默認事件 那么恢復默認事件 if(this.isPreventDefault && this.isUC() && e.preventDefault ){ // 恢復默認事件 e.preventDefault() this.isPreventDefault = false; } }, isUC(){ // 判斷是否UC瀏覽器 return navigator.appVersion.indexOf("baidubrowser") !== -1 } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/99825.html
摘要:當設置為會派發一個事件,我們會給派發的參數加一個私有屬性,值為。但是自定義的事件會阻止一些原生組件的行為。 安裝npm install better-scroll --save引入import BScroll from better-scroll基礎better-scroll支持多參數配置,可以在初始化的時候傳入第二個參數let scroll = new BScroll(.wrappe...
摘要:去年年底自己搭了一個在移動端的開發框架,感覺體驗不是很好。路由懶加載首頁終于寫完了,以上這些就是我在移動端體驗優化的實戰。去年年底自己搭了一個vue在移動端的開發框架,感覺體驗不是很好。上個星期又要做移動端的項目了。所以我花了兩天時間對之前的那個開發框架做了以下優化 自定義vuex-plugins-loading 路由切換動畫 + keep alive 動態管理緩存組件 better-sc...
摘要:的組件化功能可謂是它的一大亮點,通過將頁面上某一組件的代碼放入一個的文件中進行管理可以大大提高代碼的維護性。項目中未做移動端適配,在不同屏幕手機上打開,可能用戶體驗會差些 一、項目展示: showImg(https://user-gold-cdn.xitu.io/2018/5/18/1637183ad14a696a?w=372&h=791&f=gif&s=2408442); 注意:如果...
一、 基礎實現 (1)功能 對 better-scroll 插件的基本封裝,實現移動端的滾動 (2)實現 引入 better-scroll props probeType: better-scroll 配置項之一 (1)取值: 1 滾動的時候會派發 scroll 事件,會截流。 2 滾動的時候實時派發 scroll 事件,不會截流。 3 除了實時派發 scroll 事件,在 swipe 的情況...
一、 基礎實現 (1)功能 對 better-scroll 插件的基本封裝,實現移動端的滾動 (2)實現 引入 better-scroll props probeType: better-scroll 配置項之一 (1)取值: 1 滾動的時候會派發 scroll 事件,會截流。 2 滾動的時候實時派發 scroll 事件,不會截流。 3 除了實時派發 scroll 事件,在 swipe 的情況...
閱讀 1793·2023-04-26 01:44
閱讀 1219·2021-11-12 10:34
閱讀 1603·2021-09-09 09:33
閱讀 1738·2019-08-30 15:44
閱讀 2899·2019-08-30 13:49
閱讀 2196·2019-08-29 15:26
閱讀 951·2019-08-26 13:30
閱讀 1417·2019-08-23 18:15