怎樣使用Point事件
這次帶給大家怎樣使用Point事件,使用Point事件的注意事項有哪些,以下就是實戰案例,一起來看一下。
前言
這篇文章在草稿箱裡躺了很久,因為最近又遇到了相關問題,於是又整理了一下。請注意這裡講的不是 css 的 pointer-events。下面話不都說了,來一起看看詳細的介紹吧。
起因
從某個月黑風高的晚上開始,有人發現我們的web-app 在Chrome 模擬器裡開始出現報錯,報錯訊息大概就是下面這樣。
VM1023:1 Uncaught TypeError: Cannot read property '0' of undefined
但是只有他的瀏覽器有問題,而且對功能毫無影響,本著在我的機器上不復現的精神(好吧,當時比較忙),這個問題的優先級排的不高,但是後面一段時間慢慢有人也出現相同的問題,於是我開始在意這個問題了。
定位問題
根據呼叫堆疊很快就定位到了程式碼,原始碼定位到之前一位同事寫的元件程式碼,大概是這樣的:
dom.on('touchstart pointerdown', function (event) { /*部分业务代码*/ var touch = event.touches[0]; //报错的地方 /*部分业务代码*/ })
debug 發現是觸發了pointdown 事件,因為event 沒有touches 這個字段,導致拋出異常。但是之前用的好好的呀,難道是瀏覽器的 API 變化了?而且我也沒了解 pointerdown 事件,這事件是用來處理什麼的呢?於是我帶著兩個問題開啟了搜尋之旅:
什麼是pointerdown 事件
為什麼突然開始爆發錯誤
聊聊pointer events
查詢問題,最簡單的問題就是摟一遍W3C 的官方文件了。這裡簡單說下我的理解。
裝置輸入形式的多樣化
在PC 時代,我們透過滑鼠與螢幕交互,這時候,我們設計系統時只需要考慮滑鼠事件就好了。但如今,有許多新的設備,例如智慧型手機,平板電腦,他們包含了其他的輸入方式,例如觸摸,手寫筆,官方也為這些輸入形式都提供了新的事件。
但是對於開發者來說,這是件很麻煩的事,因為這意味著你需要為你的網頁適配各種事件,例如你要根據用戶的移動來畫圖,你需要兼容PC 和手機,你的程式碼可能就會是下面這樣
dom.addEventListener('mousemove', draw); dom.addEventListener('touchmove', draw);
如果需要相容更多的輸入裝置呢?例如手寫筆,這樣的話程式碼就會很複雜。而且,為了相容於現有的基於滑鼠事件的程式碼,許多瀏覽器都會為所有的輸入類型觸發滑鼠事件(例如在touchmove 時觸發mousemove,我在Chrome 試驗了一下不會觸發,但是因為沒有設備,手寫筆的情況沒有試),這也會導致無法確認是否真的是滑鼠觸發的事件。
如何相容於多種輸入形式
為了解決這一系列的問題,W3C 定義了一種新的輸入形式,即 pointer。任何由滑鼠、觸控、手寫筆或其他輸入裝置在螢幕上觸發的接觸,都算是 pointer 事件。
它的 API 和滑鼠事件很像,非常容易遷移。除了提供滑鼠事件常用的屬性,例如clientX,target 等等,還提供了一些用於其他輸入設備的屬性,例如壓力,接觸面,傾斜角度等等,這樣開發者就可以利用pointer 事件為所有的輸入設備開發自己的功能了!
提供的屬性
pointer 事件提供了一些特有的事件屬性
pointerId:目前指標事件的唯一標識,主要是在多點觸控時標識唯一的一個輸入源
width:接觸面的寬度
height:接觸面的高度
pressure:接触的压力值,范围是0-1,对于不支持压力的硬件,比如鼠标,按压时该值必须为 0.5,否则为 0
tiltX,titltY:手写笔的角度
pointerType:事件类型,目前有 mouse,pen,touch,如果是无法探测的指针类型,则该值为空字符串
isPrimary:用于标识是否是主指针,主要是在多点触控中生效,开发者也可以通过忽略非主指针的指针事件来实现单点触控。
如何确定主指针:
鼠标输入:一定是主指针
触摸输入:如果 pointerdown 触发时没有其他激活的触摸事件,isPrimary 为 true
手写笔输入:与触摸事件类似,pointerdown 触发时没有其他激活的 pointer 事件
相关事件
事件名称 | 作用 |
---|---|
pointerover | 与 mouseover 行为一致 |
pointerenter | 与 mouseenter 行为一致 |
pointerdown | 指针进入活动状态,比如触摸了屏幕,类似于 touchstart |
pointermove | 指针进行了移动 |
pointerup | 指针取消活动状态,比如手指离开了屏幕,类似于 touchend |
pointercancel | 类似于 touchcancel |
pointerout | 指针离开元素边缘或者离开屏幕,类似于 mouseout |
pointerleave | 类似于 mouseleave |
gotpointercapture | 元素捕获到指针事件时触发 |
lostpointercapture | 指针被释放时触发 |
可以看到,pointer 事件与已知的事件类型基本一致,但是有一点区别:在触摸屏上,我们可能会滑动屏幕来触发页面滚动,缩放或者刷新,对于 touch 事件,这时会触发 touchmove,但是对于 pointer 事件,当触发这些浏览器行为时,你却会接收到 pointercancel 事件以便于通知你浏览器已经接管了你的指针事件。
如何检测
首先,pointer 事件的支持程度已经很不错了,你可以使用 Pointer Events polyfill (本地下载)来进行兼容,也可以自行检测
if (window.PointerEvent) { // 支持 } else { // 不支持 }
导致问题的原因
这时候,对于本文一开始提到的问题就显而易见了,因为 point events 是没有 touches 这个属性的。那么我们还有两个问题。
为什么之前会用到 point events?
后来我看了下 zepto 的源码,在事件处理时是考虑到了 point event 的,同事之前写的代码大概是参考了 zepto 的事件系统。
为什么会突然爆发这个问题?
很简答,Chrome 55 开始支持这个 API,Chrome 具体的支持信息可以参考官方日志,至于怎么检测浏览器支持,可以参考上面的内容
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是怎樣使用Point事件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

mdf檔案和mds檔案怎麼用隨著電腦科技的不斷進步,我們可以透過多種方式來儲存和共享資料。在數位媒體領域,我們經常會遇到一些特殊的文件格式。在這篇文章中,我們將討論一種常見的文件格式—mdf和mds文件,並介紹它們的使用方法。首先,我們需要了解mdf檔案和mds檔案的含義。 mdf是CD/DVD鏡像檔的副檔名,而mds檔則是mdf檔的元資料檔。

CrystalDiskMark是一款適用於硬碟的小型HDD基準測試工具,可快速測量順序和隨機讀取/寫入速度。接下來就讓小編為大家介紹一下CrystalDiskMark,以及crystaldiskmark如何使用吧~一、CrystalDiskMark介紹CrystalDiskMark是一款廣泛使用的磁碟效能測試工具,用於評估機械硬碟和固態硬碟(SSD)的讀取和寫入速度和隨機I/O性能。它是一款免費的Windows應用程序,並提供用戶友好的介面和各種測試模式來評估硬碟效能的不同方面,並被廣泛用於硬體評

foobar2000是一款能隨時收聽音樂資源的軟體,各種音樂無損音質帶給你,增強版本的音樂播放器,讓你得到更全更舒適的音樂體驗,它的設計理念是將電腦端的高級音頻播放器移植到手機上,提供更便捷高效的音樂播放體驗,介面設計簡潔明了易於使用它採用了極簡的設計風格,沒有過多的裝飾和繁瑣的操作能夠快速上手,同時還支持多種皮膚和主題,根據自己的喜好進行個性化設置,打造專屬的音樂播放器支援多種音訊格式的播放,它還支援音訊增益功能根據自己的聽力情況調整音量大小,避免過大的音量對聽力造成損害。接下來就讓小編為大

在如今雲端儲存已成為我們日常生活和工作中不可或缺的一部分。百度網盤作為國內領先的雲端儲存服務之一,憑藉其強大的儲存功能、高效的傳輸速度以及便捷的操作體驗,贏得了廣大用戶的青睞。而且無論你是想要備份重要文件、分享資料,還是在線上觀看影片、聽取音樂,百度網盤都能滿足你的需求。但很多用戶可能對百度網盤app的具體使用方法還不了解,那麼這篇教學就將為大家詳細介紹百度網盤app如何使用,還有疑惑的用戶們就快來跟著本文詳細了解一下吧!百度雲網盤怎麼用:一、安裝首先,下載並安裝百度雲軟體時,請選擇自訂安裝選

網易郵箱,作為中國網友廣泛使用的一種電子郵箱,一直以來以其穩定、高效的服務贏得了用戶的信賴。而網易信箱大師,則是專為手機使用者打造的信箱軟體,它大大簡化了郵件的收發流程,讓我們的郵件處理變得更加便利。那麼網易信箱大師該如何使用,具體又有哪些功能呢,下文中本站小編將為大家帶來詳細的內容介紹,希望能幫助到大家!首先,您可以在手機應用程式商店搜尋並下載網易信箱大師應用程式。在應用寶或百度手機助手中搜尋“網易郵箱大師”,然後按照提示進行安裝即可。下載安裝完成後,我們打開網易郵箱帳號並進行登錄,登入介面如下圖所示

MetaMask(中文也叫小狐狸錢包)是一款免費的、廣受好評的加密錢包軟體。目前,BTCC已支援綁定MetaMask錢包,綁定後可使用MetaMask錢包進行快速登錄,儲值、買幣等,且首次綁定還可獲得20USDT體驗金。在BTCCMetaMask錢包教學中,我們將詳細介紹如何註冊和使用MetaMask,以及如何在BTCC綁定並使用小狐狸錢包。 MetaMask錢包是什麼? MetaMask小狐狸錢包擁有超過3,000萬用戶,是當今最受歡迎的加密貨幣錢包之一。它可免費使用,可作為擴充功能安裝在網絡

長按音箱的播放鍵後,在軟體中連接wifi即可使用。教學適用型號:小米12系統:EMUI11.0版本:小愛同學2.4.21解析1先找到音箱的播放鍵,長按進入配網模式。 2在手機上的小愛音箱軟體登入小米帳號,點選新增的小愛音箱。 3輸入wifi的名稱和密碼後,即可呼喚小愛同學進行使用了。補充:小愛音箱有什麼功能1小愛音箱有系統功能、社交功能、娛樂功能、知識功能、生活功能、智慧家庭、訓練計畫。總結/注意事項手機要事先安裝好小愛同學APP,方便連接使用。

Apple在周二推出了iOS17.4更新,為iPhone帶來了一系列新功能和修復。這次更新包含了全新的表情符號,同時歐盟用戶也能夠下載其他應用程式商店。此外,更新還加強了對iPhone安全性的控制,引入了更多的「失竊設備保護」設定選項,為用戶提供更多選擇和保障。 "iOS17.3首次引入了「失竊設備保護」功能,為用戶的敏感資料增加了額外的安全保障。當用戶不在家等熟悉地點時,該功能要求用戶首次輸入生物特徵信息,並在一小時後再次輸入資訊才能存取和更改某些數據,如修改AppleID密碼或關閉失竊設備保護功能
