<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        怎樣使用Point事件

        來源:懂視網 責編:小采 時間:2020-11-27 19:44:39
        文檔

        怎樣使用Point事件

        怎樣使用Point事件:這次給大家帶來怎樣使用Point事件,使用Point事件的注意事項有哪些,下面就是實戰案例,一起來看一下。前言這篇文章在草稿箱里躺了很久,因為最近又遇到了相關問題,于是又整理了一下。請注意這里講的不是 css 的 pointer-events。下面話不都說了,來一起看
        推薦度:
        導讀怎樣使用Point事件:這次給大家帶來怎樣使用Point事件,使用Point事件的注意事項有哪些,下面就是實戰案例,一起來看一下。前言這篇文章在草稿箱里躺了很久,因為最近又遇到了相關問題,于是又整理了一下。請注意這里講的不是 css 的 pointer-events。下面話不都說了,來一起看

        但是只有他的瀏覽器有問題,而且對功能毫無影響,本著在我的機器上不復現的精神(好吧,當時比較忙),這個問題的優先級排的不高,但是后面一段時間慢慢有人也出現相同的問題,于是我開始在意這個問題了。

        定位問題

        根據調用棧很快定位到了代碼,源碼定位到之前一位同事寫的組件代碼,大概是這樣的:

        dom.on('touchstart pointerdown', function (event) {
         /*部分業務代碼*/
         var touch = event.touches[0]; //報錯的地方
         /*部分業務代碼*/
        })

        debug 發現是觸發了 pointdown 事件,因為 event 沒有 touches 這個字段,導致拋出異常。但是之前用的好好的呀,難道是瀏覽器的 API 變化了?而且我也沒有了解過 pointerdown 事件,這個事件是用來處理什么的呢?于是我帶著兩個問題開啟了搜索之旅:

      1. 什么是 pointerdown 事件

      2. 為什么突然開始爆發錯誤

      3. 聊聊 pointer events

        查問題,最簡單的問題就是摟一遍 W3C 的官方文檔了。這里簡單說下我的理解。

        設備輸入形式的多樣化

        在 PC 時代,我們通過鼠標與屏幕交互,這時候,我們設計系統時只需要考慮鼠標事件就好了。但是如今,有很多新的設備,比如智能手機,平板電腦,他們包含了其他的輸入方式,比如觸摸,手寫筆,官方也為這些輸入形式都提供了新的事件。

        但是對于開發者來說,這是件很麻煩的事,因為這意味著你需要為你的網頁適配各種事件,比如你要根據用戶的移動來畫圖,你需要兼容 PC 和手機,你的代碼可能就會是下面這樣

        dom.addEventListener('mousemove',
         draw);
        dom.addEventListener('touchmove',
         draw);

        如果需要兼容更多的輸入設備呢?比如手寫筆,這樣的話代碼就會很復雜。而且,為了兼容現有的基于鼠標事件的代碼,很多瀏覽器都會為所有的輸入類型觸發鼠標事件(例如在 touchmove 時觸發 mousemove,我在 Chrome 試驗了一下不會觸發,但是因為沒有設備,手寫筆的情況沒有試),這也會導致無法確認是否真的是鼠標觸發的事件。

        如何兼容多種輸入形式

        為了解決這一系列的問題,W3C 定義了一種新的輸入形式,即 pointer。任何由鼠標、觸摸、手寫筆或者其他輸入設備在屏幕上觸發的接觸,都算是 pointer 事件。

        它的 API 和鼠標事件很像,非常容易遷移。除了提供鼠標事件常用的屬性,比如 clientX,target 等等,還提供了一些用于其他輸入設備的屬性,比如壓力,接觸面,傾斜角度等等,這樣開發者就可以利用 pointer 事件為所有的輸入設備開發自己的功能了!

        提供的屬性

        pointer 事件提供了一些特有的事件屬性

      4. pointerId:當前指針事件的唯一標識,主要是在多點觸控時標識唯一的一個輸入源

      5. width:接觸面的寬度

      6. height:接觸面的高度

      7. pressure:接觸的壓力值,范圍是0-1,對于不支持壓力的硬件,比如鼠標,按壓時該值必須為 0.5,否則為 0

      8. tiltX,titltY:手寫筆的角度

      9. pointerType:事件類型,目前有 mouse,pen,touch,如果是無法探測的指針類型,則該值為空字符串

      10. isPrimary:用于標識是否是主指針,主要是在多點觸控中生效,開發者也可以通過忽略非主指針的指針事件來實現單點觸控。

      11. 如何確定主指針:

        鼠標輸入:一定是主指針

        觸摸輸入:如果 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 具體的支持信息可以參考官方日志,至于怎么檢測瀏覽器支持,可以參考上面的內容

        相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

        推薦閱讀:

        怎樣使用Vue中字符串模板

        如何處理Mac安裝thrift因bison報錯

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        怎樣使用Point事件

        怎樣使用Point事件:這次給大家帶來怎樣使用Point事件,使用Point事件的注意事項有哪些,下面就是實戰案例,一起來看一下。前言這篇文章在草稿箱里躺了很久,因為最近又遇到了相關問題,于是又整理了一下。請注意這里講的不是 css 的 pointer-events。下面話不都說了,來一起看
        推薦度:
        標簽: 如何 用法 事件
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产人在线成免费视频| 国产一二三四区乱码免费| 免费成人高清在线视频| 四虎精品亚洲一区二区三区| 亚洲日产乱码一二三区别| 亚洲香蕉免费有线视频| 亚洲欧洲成人精品香蕉网| 99久久免费国产精精品| 成人免费视频软件网站| 亚洲综合在线视频| 爱丫爱丫影院在线观看免费| 爱情岛论坛网亚洲品质自拍| 国产91成人精品亚洲精品| 成人免费视频试看120秒| 91亚洲精品麻豆| 日韩精品无码免费一区二区三区| 中文字幕在亚洲第一在线| 特黄特色的大片观看免费视频| 女人18毛片特级一级免费视频| 国产成人无码免费视频97| 在线综合亚洲欧洲综合网站| 国产精品久久久久久久久免费| 亚洲黄网在线观看| 日韩人妻一区二区三区免费| 亚洲AV成人片色在线观看高潮| 国产精品亚洲综合久久| 无人影院手机版在线观看免费| 亚洲首页在线观看| 黄色网址免费观看| 亚洲色中文字幕在线播放| 好爽…又高潮了免费毛片| 亚洲精品理论电影在线观看| 国产三级电影免费观看| jzzjzz免费观看大片免费| 亚洲国产精品高清久久久| 国产无限免费观看黄网站| 久久久久久亚洲精品中文字幕| 亚洲w码欧洲s码免费| 亚洲国产成人手机在线观看| 亚洲性日韩精品一区二区三区| 无码国产精品一区二区免费3p|