亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JS中touchstart事件與click事件沖突的解決方法

2024-05-06 16:43:00
字體:
來源:轉載
供稿:網友

前言

移動互聯網是未來的發展趨勢,現在國內很多互聯網大佬都在爭取移動這一塊大餅,如微信及支付寶是目前比較成功的例子,當然還有各種APP和web運用。

下面這篇文章主要介紹了關于JS中touchstart事件與click事件沖突解決的相關內容,下面話不多說了,來一起看看詳細的介紹吧。

一 · 業務場景的描述

在對已完成的PC站點進行移動端適配時,我們想要站點在移動設備上有更快的響應速度,以帶給用戶更好的體驗,此時,我們應該使用移動設備專用的事件系統,例如,使用 touchstart 事件代替 click 事件。

為什么這樣效果會更好呢?根據Google開發者文檔中的描述:

移動設備上的瀏覽器將會在 click 事件觸發時延遲 300ms ,以確保這是一個“單擊”事件而非“雙擊”事件。
而對于 touchstart 事件而言,則會在用戶手指觸碰屏幕的一瞬間觸發所綁定的事件。所以,使用 touchstart 替換 click 事件的意義在于,幫助用戶在每次點擊時節省 300ms 的時間。在頁面頻繁需要點擊,或者點擊發生在動畫中,對動畫流暢度有較高要求的情境下,使用這種技術是非常必要的。

但是,讓我們回到我們的初始場景,在 PC端站點適配移動端時 我們不能簡單的進行 touchstart和 click 事件的替換,因為PC并不能識別 touchstart 事件。

二 · 產生沖突的原因

當然,我們可以給某個元素同時綁定 touchstart 和 click 事件,但這將會導致本篇文章解決的問題 -- 這兩個事件在移動設備上會發生沖突。

由于移動設備能夠同時識別 touchstart 和 click 事件,因此當用戶點擊目標元素時,綁定在目標元素上的 touchstart 事件與 click 事件(約300ms后)會依次被觸發,也就是說,我們所綁定的回調函數會被執行兩次!。這顯然不是我們想要的結果。

三 · 解決方案

針對這樣的情境,有以下兩種解決方案:

(一)使用 preventDefault

第一種解決方案是使用事件對象中的 preventDefault 方法,preventDefault 方法的作用在于:阻止元素默認事件行為的發生,但有意思的是,當我們在目標元素同時綁定 touchstart 和 click 事件時,在 touchstart 事件回調函數中使用該方法,可以阻止后續 click 事件的發生。

這從道理上是講不通的,畢竟,我們添加的 click 事件并不是元素的“默認事件”,但它確實奏效了,或者說,被瀏覽器實現了,因此我們可以使用該方法解決移動設備上 touchstart 事件與 click 事件的沖突問題,具體代碼如下:

js;">const Button = document.getElementById("targetButton")Button.addEventListener("touchstart", e => { e.preventDefault() console.log("touchstart event!")}) Button.addEventListener("click", e => { e.preventDefault() console.log("click event!")})

當你在瀏覽器上模擬移動設備后點擊目標元素,只會在控制臺看到 touchstart event! 字段,很顯然,click 事件被成功阻止了。

總結

使用該方法的優點在于簡單粗暴,直接有效,能夠很好的實現我們的目標,但缺點在于, preventDefault 方法為阻止 click 事件的方式是瀏覽器實現上的,而不是 preventDefault 原理上的,這會帶來一些不確定性,雖然我暫時尚未發現該方法失效的具體場景。

(二)基于功能檢測綁定事件

我們可以通過判斷瀏覽器是否支持 touchstart 事件來封裝元素的點擊事件,這樣客戶端會根據當前環境判定元素應該綁定的事件類型,代碼如下:

const Button = document.getElementById("targetButton")const clickEvent = (function() { if ('ontouchstart' in document.documentElement === true) return 'touchstart'; else return 'click';})(); Button.addEventListener(clickEvent, e => { console.log("things happened!")})

總結

該方法的優點在于,我們通過增加一次判斷,為元素減少了一個不必要的事件綁定,從而避免了 touchstart 與 click 事件的沖突問題。這種方法避免了我們書寫兩次同樣的代碼,并且相較于第一種方法更加符合邏輯,因此是我所推薦的。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美三级免费观看| 日韩中文字幕第一页| 午夜精品在线视频| 国产91热爆ts人妖在线| 亚洲跨种族黑人xxx| 91高清免费在线观看| 亚洲男人天堂2019| 国产精品三级网站| 国产高清在线不卡| 国产精品极品美女在线观看免费| 最近中文字幕2019免费| 亚洲r级在线观看| 欧美有码在线观看视频| 国产精品香蕉在线观看| 国产精品久久久久免费a∨| 欧洲午夜精品久久久| 国产精品高潮粉嫩av| 国产激情久久久久| 81精品国产乱码久久久久久| 国内免费精品永久在线视频| 欧美电影免费观看网站| 伊人伊成久久人综合网站| 日韩电影视频免费| 伊人久久大香线蕉av一区二区| 日韩欧美在线观看| 在线观看国产成人av片| 国产成人精品久久| 91成人国产在线观看| 主播福利视频一区| 日韩av最新在线观看| 亚洲一区二区三区成人在线视频精品| 亚洲网址你懂得| 中文字幕综合在线| 国产精品91视频| 亚洲电影免费观看高清完整版在线观看| 国产亚洲免费的视频看| 91精品国产色综合久久不卡98口| 91av网站在线播放| 精品国产精品三级精品av网址| 亚洲新中文字幕| 国产精品九九九| 北条麻妃一区二区在线观看| 亚洲成年人影院在线| 欧美在线国产精品| 国产精品视频一| 国产精品美女久久久久久免费| 91免费综合在线| 久久精品国产v日韩v亚洲| 国产精品一区二区三区免费视频| 欧美在线视频播放| 欧美性受xxxx黑人猛交| 日韩成人在线视频网站| 欧美在线一级va免费观看| 精品日韩美女的视频高清| 国产精品在线看| 精品国内自产拍在线观看| 国产精品三级美女白浆呻吟| 国产精品国语对白| 成人国产精品日本在线| 欧美第一淫aaasss性| 亚洲欧美另类中文字幕| 日韩成人中文字幕| 国产精品视频男人的天堂| 亚洲精品福利在线| 在线成人激情视频| 国产精品视频网| 国产精品毛片a∨一区二区三区|国| 欧美日韩亚洲天堂| 国产精品第七十二页| 久久久噜噜噜久久中文字免| 日韩电影免费观看中文字幕| 欧美黑人巨大xxx极品| 91香蕉电影院| 亚洲天堂免费在线| 久久久久久久色| 日韩精品中文字幕在线播放| 91成人在线视频| 久久精品这里热有精品| 国产精品女人久久久久久| 免费av在线一区| 欧美国产日韩xxxxx| 久久亚洲精品国产亚洲老地址| 一区二区av在线| 精品国偷自产在线视频99| www.xxxx欧美| 精品中文字幕视频| 91成人国产在线观看| 日本久久亚洲电影| 97精品久久久中文字幕免费| 日韩电影免费观看中文字幕| 国产日韩欧美视频在线| 成人黄色av免费在线观看| 欧美日韩国产精品一区二区三区四区| 奇米一区二区三区四区久久| 欧美大全免费观看电视剧大泉洋| 亚洲午夜未满十八勿入免费观看全集| 久久久久久久电影一区| 久久97久久97精品免视看| 国产视频精品va久久久久久| 国产视频精品一区二区三区| 欧美日韩另类字幕中文| 97国产精品人人爽人人做| 精品成人在线视频| 国产成人短视频| 激情懂色av一区av二区av| 性欧美亚洲xxxx乳在线观看| 69影院欧美专区视频| 久久久中精品2020中文| 久久久久久伊人| 亚洲视频在线视频| 欧美日韩另类视频| 久热精品视频在线观看| 欧美香蕉大胸在线视频观看| 97视频免费在线看| 亚洲欧美在线一区| 亚洲一区二区国产| 国产精品美女呻吟| 亚洲aa中文字幕| 久久偷看各类女兵18女厕嘘嘘| 日韩最新免费不卡| 亚洲最新在线视频| 欧美寡妇偷汉性猛交| 日韩国产高清视频在线| 麻豆成人在线看| 亚洲天堂网站在线观看视频| 欧美又大粗又爽又黄大片视频| 久久av资源网站| 亚洲视频axxx| 欧美丰满少妇xxxxx做受| 欧美激情久久久久| 欧美日韩国产丝袜另类| 久久精品在线视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲精品一区二区三区婷婷月| 亚洲影院色在线观看免费| 色综合影院在线| 国产精品对白刺激| 国产精品扒开腿做爽爽爽男男| 精品动漫一区二区三区| 欧美巨大黑人极品精男| 国产精品v片在线观看不卡| 久久精品99久久香蕉国产色戒| 大胆欧美人体视频| 日韩高清免费观看| 日韩在线观看av| 伊人久久久久久久久久久| 日韩在线小视频| 日韩av成人在线| 欧美视频专区一二在线观看| 日韩精品中文字幕在线观看| 国产一区二区在线播放| 久久九九热免费视频| 伊人久久久久久久久久| 亚洲精品视频免费| 久久久精品日本| 夜色77av精品影院| 欧美激情中文字幕乱码免费| 欧美天堂在线观看| 精品免费在线观看| 国产精品丝袜久久久久久高清| 国产精品极品在线| 韩国一区二区电影| 91在线视频九色| 亚洲欧美日本精品|