<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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        移動web開發中有關touch事件(詳細教程)

        來源:懂視網 責編:小OO 時間:2020-11-27 19:38:14
        文檔

        移動web開發中有關touch事件(詳細教程)

        前面的話;iOS版Safari為了向開發人員傳達一些特殊信息,新增了一些專有事件。因為iOS設備既沒有鼠標也沒有鍵盤,所以在為移動Safari開發交互性網頁時,常規的鼠標和鍵盤事件根本不夠用。隨著Android 中的WebKit的加入,很多這樣的專有事件變成了事實標準,導致W3C開始制定Touch Events規范。本文將詳細介紹移動端touch事件。概述;包含iOS 2.0軟件的iPhone 3G發布時,也包含了一個新版本的Safari瀏覽器。這款新的移動Safari提供了一些與觸摸(touch)操作相關的新事件。后來,Android上的瀏覽器也實現了相同的事件。觸摸事件會在用戶手指放在屏幕上面時、在屏幕上滑動時或從屏幕上移開時觸發。具體來說,有以下幾個觸摸事件。
        推薦度:
        導讀前面的話;iOS版Safari為了向開發人員傳達一些特殊信息,新增了一些專有事件。因為iOS設備既沒有鼠標也沒有鍵盤,所以在為移動Safari開發交互性網頁時,常規的鼠標和鍵盤事件根本不夠用。隨著Android 中的WebKit的加入,很多這樣的專有事件變成了事實標準,導致W3C開始制定Touch Events規范。本文將詳細介紹移動端touch事件。概述;包含iOS 2.0軟件的iPhone 3G發布時,也包含了一個新版本的Safari瀏覽器。這款新的移動Safari提供了一些與觸摸(touch)操作相關的新事件。后來,Android上的瀏覽器也實現了相同的事件。觸摸事件會在用戶手指放在屏幕上面時、在屏幕上滑動時或從屏幕上移開時觸發。具體來說,有以下幾個觸摸事件。

        下面我就為大家分享一篇移動web開發之touch事件實例詳解,具有很好的參考價值,希望對大家有所幫助。

        前面的話

        iOS版Safari為了向開發人員傳達一些特殊信息,新增了一些專有事件。因為iOS設備既沒有鼠標也沒有鍵盤,所以在為移動Safari開發交互性網頁時,常規的鼠標和鍵盤事件根本不夠用。隨著Android 中的WebKit的加入,很多這樣的專有事件變成了事實標準,導致W3C開始制定Touch Events規范。本文將詳細介紹移動端touch事件

        概述

        包含iOS 2.0軟件的iPhone 3G發布時,也包含了一個新版本的Safari瀏覽器。這款新的移動Safari提供了一些與觸摸(touch)操作相關的新事件。后來,Android上的瀏覽器也實現了相同的事件。觸摸事件會在用戶手指放在屏幕上面時、在屏幕上滑動時或從屏幕上移開時觸發。具體來說,有以下幾個觸摸事件

        touchstart:當手指觸摸屏幕時觸發;即使已經有一個手指放在了屏幕上也會觸發
        touchmove:當手指在屏幕上滑動時連續地觸發。在這個事件發生期間,調用preventDefault()可以阻止滾動
        touchend:當手指從屏幕上移開時觸發
        touchcancel:當系統停止跟蹤觸摸時觸發(不常用)。關于此事件的確切觸發時間,文檔中沒有明確說明

        【touchenter 和 touchleave】

        觸摸事件規范中曾經包含touchenter和touchleave事件,這兩個事件在用戶手指移入或移出某個元素時觸發。但是這兩個事件從來沒有被實現。微軟有這兩個事件的替代事件,但是只有IE瀏覽器支持。某些情況下可以知道用戶手指滑入滑出某個元素是素是非常有用的,所以希望這兩個事件可以重返規范

        在觸摸事件中,常用的是touchstart、touchumove和touchend這三個事件,與鼠標事件的對應如下

        鼠標 觸摸 
        mousedown touchstart 
        mousemove touchmove 
        mouseup touchend

        [注意]touch事件在chrome模擬器下部分版本使用DOM0級事件處理程序的方式來添加事件無效

        <!DOCTYPE html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta http-equiv="X-UA-Compatible" content="ie=edge">
         <title>Document</title>
         <style>
         #test{height:200px;width:200px;background:lightblue;}
         </style>
        </head>
        <body>
        <p id="test"></p>
        <script>
         (function(){ 
         var 
         stateMap = {
         touchstart_index : 0,
         touchmove_index : 0,
         touchend_index : 0
         },
         elesMap = {
         touch_obj: document.getElementById('test')
         },
         showIndex, handleTouch;
         showIndex = function ( type ) {
         elesMap.touch_obj.innerHTML = type + ':' + (++stateMap[type + '_index']);
         };
         handleTouch = function ( event ) {
         showIndex( event.type );
         };
         elesMap.touch_obj.addEventListener('touchstart', function(event){handleTouch(event);}); 
         elesMap.touch_obj.addEventListener('touchmove', function(event){handleTouch(event);});
         elesMap.touch_obj.addEventListener('touchend', function(event){handleTouch(event);});
         })(); 
        </script>
        </body>
        </html>

        300ms

        300ms問題是指在某個元素執行它的功能和執行touch事件之間有一個300毫秒的間隔。鼠標事件、焦點事件、瀏覽器默認行為等相較于touch事件,都存在著300ms的延遲

        【點透】

        因為300ms的存在,會造成常見的點透問題。先來看例子

        <!DOCTYPE html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
         <meta http-equiv="X-UA-Compatible" content="ie=edge">
         <title>Document</title>
         <style>
         #test {position: absolute;top: 0;left: 0;opacity: 0.5;height: 200px;width: 200px;background: lightblue;}
         </style>
        </head>
        <body>
         <a href="https://baidu.com">百度</a>
         <p id="test"></p>
         <script>
         (function () {
         var
         elesMap = {
         touchObj: document.getElementById('test')
         },
         fnHide, onTouch;
         fnHide = function (type) {
         elesMap.touchObj.style.display = 'none';
         };
         onTouch = function (event) {
         fnHide();
         };
         elesMap.touchObj.addEventListener('touchstart', function(event){onTouch(event);});
         })(); 
         </script>
        </body>
        </html>

        淺藍色的半透明p被點擊(觸發touch事件)后,如果點擊位置正好位于鏈接的上方,則會觸發鏈接跳轉的默認行為。詳細解釋是,點擊頁面后,瀏覽器會記錄所點擊的頁面坐標,300ms后,在該坐標找到元素。在該元素上觸發點擊行為。因此,如果300ms內同一頁面坐標的上層元素消失后,300ms后在下層元素上觸發點擊行為。這就造成了點透問題

        造成這個問題,是因為觸摸屏幕的行為被重載(overload)了。在手指觸摸屏幕的瞬間,瀏覽器無法預知用戶是在輕觸(Tap)、雙觸(Double-Tap)、滑動(Swipe)、按住不放(Hold)還是其他什么操作。唯一保險的做法就是等上一會兒看接下來會發生什么

        問題是在于雙觸(Double-Tap)。即便是瀏覽器檢測出手指離開了屏幕,它仍然無法判斷接下來做什么。因為瀏覽器無法知道手指是會再次回到屏幕,還是就此結束觸發輕觸事件以及事件級聯。為了確定這一點,瀏覽器不得不等待一小段時間。瀏覽器開發者找到一個最佳時間間隔,就是300毫秒

        【解決辦法】

        1、在touch事件的事件處理程序中增加300ms的延遲

        (function () {
         var
         elesMap = {
         touchObj: document.getElementById('test')
         },
         fnHide, onTouch;
         fnHide = function (type) {
         elesMap.touchObj.style.display = 'none';
         };
         onTouch = function (event) {
         setTimeout(function(){
         fnHide();
         },300);
         };
         elesMap.touchObj.addEventListener('touchstart', function (event) { onTouch(event); });
         })();

        2、使用緩動動畫,增加300ms的過渡效果,注意display屬性無法使用transition

        3、加入中間層的dom元素,讓中間層接受這個穿透事件,稍后隱藏

        4、上下兩級都使用tap事件,但默認行為不可避免

        5、在document上的touchstart事件,阻止默認行為。

        document.addEventListener('touchstart',function(e){
         e.preventDefault();
        })

        接著,添加a標簽的跳轉行為

        a.addEventListener('touchstart',function(){
         window.location.href = 'https://cnblogs.com'; 
        })

        但是,這種方法有副作用,會造成頁面無法滾動、文本無法選中等。如果在某個元素上,需要恢復文本選中的行為,則可以使用阻止冒泡來恢復

        el.addEventListener('touchstart',function(e){
         e.stopPropagation();
        })

        事件對象

        【基礎信息】

        每個觸摸事件的event對象都提供了在鼠標事件中常見的屬性,包括事件類型、事件目標對象、事件冒泡、事件流、默認行為等

        以touchstart為例,示例代碼如下

        <script>
         (function () {
         var
         elesMap = {
         touchObj: document.getElementById('test')
         },
         onTouch;
         onTouch = function (e) {
         console.log(e)
         };
         elesMap.touchObj.addEventListener('touchstart', function (event) { onTouch(event); });
         })(); 
         </script>

        1、currentTarget屬性返回事件正在執行的監聽函數所綁定的節點

        2、target屬性返回事件的實際目標節點

        3、srcElement屬性與target屬性功能一致

        //當前目標
        currentTarget:[object HTMLpElement]
        //實際目標
        target:[object HTMLpElement]
        //實際目標
        srcElement:[object HTMLpElement]

        4、eventPhase屬性返回一個整數值,表示事件目前所處的事件流階段。0表示事件沒有發生,1表示捕獲階段,2表示目標階段,3表示冒泡階段

        5、bubbles屬性返回一個布爾值,表示當前事件是否會冒泡。該屬性為只讀屬性

        6、cancelable屬性返回一個布爾值,表示事件是否可以取消。該屬性為只讀屬性

        //事件流
        eventPhase: 2
        //可冒泡
        bubbles: true
        //默認事件可取消
        cancelable: true

        【touchList】

        除了常見的DOM屬性外,觸摸事件對象有一個touchList數組屬性,其中包含了每個觸摸點的信息。如果用戶使用四個手指觸摸屏幕,這個數組就會有四個元素。一共有三個這樣的數組

        1、touches:當前觸摸屏幕的觸摸點數組(至少有一個觸摸在事件目標元素上)

        2、changedTouches :導致觸摸事件被觸發的觸摸點數組

        3、targetTouches:事件目標元素上的觸摸點數組

        如果用戶最后一個手指離開屏幕觸發touchend事件,這最后一個觸摸點信息不會出現在targetTouches和touches數組中,但是會出現在changedTouched數組中。因為是它的離開觸發了touchend事件,所以changedTouches數組中仍然包含它。上面三個數組中,最常用的是changedTouches數組

        (function () {
         var
         elesMap = {
         touchObj: document.getElementById('test')
         },
         onTouch;
         onTouch = function (e) {
         elesMap.touchObj.innerHTML = 'touches:' + e.touches.length
         + '<br>changedTouches:' + e.changedTouches.length
         + '<br>targetTouches:' + e.targetTouches.length;
         };
         elesMap.touchObj.addEventListener('touchstart', function (event) { onTouch(event); });
         })();

        【事件坐標】

        上面這些觸摸點數組中的元素可以像普通數組那樣用數字索引。數組中的元素包含了觸摸點的有用信息,尤其是坐標信息。每個Touch對象包含下列屬性

        clientx:觸摸目標在視口中的x坐標
        clientY:觸摸目標在視口中的y坐標
        identifier:標識觸摸的唯一ID
        pageX:觸摸目標在頁面中的x坐標(包含滾動)
        pageY:觸摸目標在頁面中的y坐標(包含滾動)
        screenX:觸摸目標在屏幕中的x坐標
        screenY:觸摸目標在屏幕中的y坐標
        target:觸摸的DOM節點目標

        changedTouches數組中的第一個元素就是導致事件觸發的那個觸摸點對象(通常這個觸摸點數組不包含其他對象)。這個觸摸點對象含有clientX/Y和pageX/Y坐標信息。除此之外還有screenX/Y和x/y,這些坐標在瀏覽器間不太一致,不建議使用

        clientX/Y和pageX/Y的區別在于前者相對于視覺視口的左上角,后者相對于布局視口的左上角。布局視口是可以滾動的

        (function () {
         var
         elesMap = {
         touchObj: document.getElementById('test')
         },
         onTouch;
         onTouch = function (e) {
         var touch = e.changedTouches[0];
         elesMap.touchObj.innerHTML = 'clientX:' + touch.clientX + '<br>clientY:' + touch.clientY
         + '<br>pageX:' + touch.pageX + '<br>pageY:' + touch.pageY
         + '<br>screenX:' + touch.screenX + '<br>screenY:' + touch.screenY
         };
         elesMap.touchObj.addEventListener('touchstart', function (event) { onTouch(event); });
         })();

        上面是我整理給大家的,希望今后會對大家有幫助。

        相關文章:

        在angularjs中使用$http實現異步上傳Excel文件方法

        通過vuejs如何實現數據驅動視圖原理

        在Vue中如何使用父組件調用子組件事件

        在vue中如何實現密碼顯示隱藏切換功能

        在vue.js中詳細解讀this.$emit的使用方法

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

        文檔

        移動web開發中有關touch事件(詳細教程)

        前面的話;iOS版Safari為了向開發人員傳達一些特殊信息,新增了一些專有事件。因為iOS設備既沒有鼠標也沒有鍵盤,所以在為移動Safari開發交互性網頁時,常規的鼠標和鍵盤事件根本不夠用。隨著Android 中的WebKit的加入,很多這樣的專有事件變成了事實標準,導致W3C開始制定Touch Events規范。本文將詳細介紹移動端touch事件。概述;包含iOS 2.0軟件的iPhone 3G發布時,也包含了一個新版本的Safari瀏覽器。這款新的移動Safari提供了一些與觸摸(touch)操作相關的新事件。后來,Android上的瀏覽器也實現了相同的事件。觸摸事件會在用戶手指放在屏幕上面時、在屏幕上滑動時或從屏幕上移開時觸發。具體來說,有以下幾個觸摸事件。
        推薦度:
        標簽: 移動 事件 web
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久这里只精品热免费99| 十八禁的黄污污免费网站| 国产成人精品免费午夜app| 亚洲va久久久噜噜噜久久天堂| 两个人看的www免费视频| 久久久久亚洲AV成人网人人软件| 免费无码国产在线观国内自拍中文字幕| 午夜小视频免费观看| 亚洲av无码专区在线电影天堂 | 日日狠狠久久偷偷色综合免费| 亚洲av区一区二区三| 国产精品九九久久免费视频 | xvideos亚洲永久网址| 亚欧乱色国产精品免费视频| 亚洲人色婷婷成人网站在线观看 | 爱情岛论坛亚洲品质自拍视频网站| 精品久久久久久久免费人妻| 免费人成在线观看播放a| 亚洲中文字幕无码久久精品1| 无码一区二区三区免费| 2020年亚洲天天爽天天噜| 国产又粗又长又硬免费视频| GOGOGO高清免费看韩国| 中文字幕亚洲综合久久2| 国产精品久久久久免费a∨| 国产精品亚洲综合| 亚洲毛片在线观看| 成年女人喷潮毛片免费播放| 一区二区三区在线免费 | 国产午夜影视大全免费观看 | 日韩免费一区二区三区在线播放| 亚洲欧美日韩中文字幕一区二区三区 | 国产V片在线播放免费无码| 亚洲精品高清久久| 日本一道综合久久aⅴ免费| 中文字幕无码免费久久| 中文字幕在线日亚洲9| 国产成人毛片亚洲精品| 国产日本一线在线观看免费| 日本激情猛烈在线看免费观看| 亚洲黄色免费在线观看|