国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:20:50
字體:
供稿:網(wǎng)友

前言

移動互聯(lián)網(wǎng)是未來的發(fā)展趨勢,現(xiàn)在國內(nèi)很多互聯(lián)網(wǎng)大佬都在爭取移動這一塊大餅,如微信及支付寶是目前比較成功的例子,當(dāng)然還有各種APP和web運用。

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

一 · 業(yè)務(wù)場景的描述

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

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

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

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

二 · 產(chǎn)生沖突的原因

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

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

三 · 解決方案

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

(一)使用 preventDefault

第一種解決方案是使用事件對象中的 preventDefault 方法,preventDefault 方法的作用在于:阻止元素默認(rèn)事件行為的發(fā)生,但有意思的是,當(dāng)我們在目標(biāo)元素同時綁定 touchstart 和 click 事件時,在 touchstart 事件回調(diào)函數(shù)中使用該方法,可以阻止后續(xù) click 事件的發(fā)生。

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

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!")})            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 浑源县| 安陆市| 健康| 益阳市| 中江县| 呈贡县| 旌德县| 鞍山市| 香港 | 三亚市| 抚松县| 嘉义县| 左云县| 宁河县| 正宁县| 庆安县| 双辽市| 类乌齐县| 博罗县| 霸州市| 宁南县| 伊春市| 安顺市| 曲水县| 蛟河市| 高青县| 鄂伦春自治旗| 洱源县| 淳化县| 涪陵区| 防城港市| 囊谦县| 彭山县| 乐陵市| 黄浦区| 临安市| 南雄市| 郧西县| 讷河市| 临泽县| 象州县|