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