touch事件與click事件區別
兩個事件從名稱上看差別有點大,touch事件用於移動端,click事件專注於電腦端。
但是兩者又有很大的相似之處,都是點選事件,一個是觸屏點選,一個是通過滑鼠點選。
還有讓人迷惑的一點,就是click事件用於移動端觸屏點選同樣有效。
首先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div { width:150px; height:100px; background-color:blue; } </style> <script> window.onload = function () { let odiv = document.getElementsByTagName("div")[0]; odiv.onclick = function () { odiv.style.backgroundColor = "red"; } } </script> </head> <body> <div></div> </body> </html>
上述程式碼為div元素註冊click事件處理函式,點選之後將其背景顏色設定為紅色。
程式碼適用於電腦端,但是在移動端依然有效,觸屏點選同樣可以將div背景顏色設定為紅色。
雖然非常相似,兩者的區別也是巨大的,下面分佈進行一下介紹。
一.為什麼click事件可以用於移動端:
最初移動端裝置是無法訪問網頁的,電腦端一統天下,click自然順風順水。
隨著軟硬體的進步,可以在移動端上瀏覽網頁,自然要設計移動端想配套的事件。
由此觸屏相關的事件誕生,但是此時網頁絕大多數都沒有考慮移動端的。
為了相容電腦端的頁面,採取瞭如下兩個措施:
(1).click事件在移動端依然有效,這也保全了已有的功能。
(2).電腦端頁面較大,將其置於螢幕較小的移動裝置之中時,頁面內容在視覺上非常小,必須具有放大鏡一樣的眼睛才能看清楚,為了解決此問題,對click事件進行了一些特殊處理,裝置會檢測兩次連續的click事件之間的間隔,如果間隔小於300ms,那麼就會觸發頁面的放大或者縮小功能,這樣就差強人意的解決了使用者瀏覽頁面的問題;如果兩次點選間隔大於300ms,那麼觸發普通的點選事件,這也就是大家常說的click事件300ms延遲現象。
也可以看到,當前無需糾結於兩者的區別,因為現在都有專門針對移動端設計頁面,所以安心使用移動端配套的事件即可,當然多掌握一點知識沒有任何問題,起碼可以做到心中比較敞亮,對身體健康也是有好處的,^_^。
三.touch事件的優先順序高於click事件:
touch事件的有限級高於click事件,下面通過一段程式碼例項進行一下簡單演示。
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> #ant { background: red; width: 500px; height: 500px; } </style> <script> window.onload = function () { let odiv = document.getElementById("ant"); odiv.addEventListener("touchstart", function (e) { console.log("touchstart"); }); odiv.addEventListener("touchend", function (e) { console.log("touchend"); }); odiv.onclick = function () { console.log("divclick"); } document.body.onclick = function () { console.log("bodyclick"); } } </script> </head> <body> <div id="ant"></div> </body> </html>
程式碼執行效果截圖如下:
使用preventDefault()可以遮蔽掉click事件,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼odiv.addEventListener("touchstart", function (e) { console.log("touchstart"); e.preventDefault(); });
將其放入touchend事件處理函式也可以產生同樣的效果:
[JavaScript] 純文字檢視 複製程式碼odiv.addEventListener("touchend", function (e) { console.log("touchend"); e.preventDefault(); });
非常簡單,只要記住結論即可,就不再進行截圖演示。
相關文章
- onclick與click事件的區別事件
- touch事件和click事件多次觸發的問題事件
- click事件生成事件
- JavaScript click 事件JavaScript事件
- 如何解決 touchstart 事件與 click 事件的衝突事件
- loadend 與 load 事件區別事件
- input與change事件區別事件
- iOS GestureRecognizer與UIResponder touch事件響應iOSUI事件
- React事件與普通HTML事件有什麼區別React事件HTML
- 移動端 touch事件事件
- 移動端touch事件事件
- 事件風暴EventStorming與事件建模EventModeling的區別 | rafalmaciag事件ORMMac
- 安卓觸控事件與單擊事件的區別安卓事件
- 手機端html5觸屏事件(touch事件)HTML事件
- 雙擊事件(dblclick)時,不觸發單擊事件(click)事件
- click事件形成的條件 – Eric事件
- Vue根據條件新增click事件Vue事件
- 【.NET】多執行緒:自動重置事件與手動重置事件的區別執行緒事件
- Flutter——原生View的Touch事件分發流程FlutterView事件
- svg click事件失效(僅限edge瀏覽器)SVG事件瀏覽器
- 動態生成的html元素繫結click事件HTML事件
- 事件流與事件溯源事件
- click事件在蘋果手機失效的問題事件蘋果
- 命令和事件有什麼區別? - Oskar事件
- js實現簡易的touch事件(es5)JS事件
- Js 事件原理與事件委託JS事件
- Javascript中的事件物件和事件型別JavaScript事件物件型別
- 瀏覽器與Node的事件迴圈(Event Loop)有何區別?瀏覽器事件OOP
- 【ol】事件型別事件型別
- 事件註冊與事件代理學習事件
- 委託與事件-事件詳解(二)事件
- JS的事件物件與事件機制JS事件物件
- node的事件迴圈和瀏覽器的事件迴圈有什麼區別?事件瀏覽器
- W3C的事件處理和IE的事件處理有哪些區別?事件
- 事件關鍵詞 bind 和 catch 的區別、事件物件 target 和 currentTarget 的差異事件物件
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- 非同步API中事件、命令和狀態區別非同步API事件
- 表單事件與鍵盤事件學習事件