真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

移動web開發(fā)之touch事件的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹移動web開發(fā)之touch事件的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計制作的專業(yè)網(wǎng)站制作公司,擁有經(jīng)驗豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨特的設(shè)計風(fēng)格。自公司成立以來曾獨立設(shè)計制作的站點1000多家。

前面的話

iOS版Safari為了向開發(fā)人員傳達(dá)一些特殊信息,新增了一些專有事件。因為iOS設(shè)備既沒有鼠標(biāo)也沒有鍵盤,所以在為移動Safari開發(fā)交互性網(wǎng)頁時,常規(guī)的鼠標(biāo)和鍵盤事件根本不夠用。隨著Android 中的WebKit的加入,很多這樣的專有事件變成了事實標(biāo)準(zhǔn),導(dǎo)致W3C開始制定Touch Events規(guī)范。

概述

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

touchstart:當(dāng)手指觸摸屏幕時觸發(fā);即使已經(jīng)有一個手指放在了屏幕上也會觸發(fā)
touchmove:當(dāng)手指在屏幕上滑動時連續(xù)地觸發(fā)。在這個事件發(fā)生期間,調(diào)用preventDefault()可以阻止?jié)L動
touchend:當(dāng)手指從屏幕上移開時觸發(fā)
touchcancel:當(dāng)系統(tǒng)停止跟蹤觸摸時觸發(fā)(不常用)。關(guān)于此事件的確切觸發(fā)時間,文檔中沒有明確說明

【touchenter 和 touchleave】

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

在觸摸事件中,常用的是touchstart、touchumove和touchend這三個事件,與鼠標(biāo)事件的對應(yīng)如下

鼠標(biāo)   觸摸   
mousedown touchstart 
mousemove touchmove 
mouseup  touchend

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




 
 
 
 Document
 


300ms

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

【點透】

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




 
 
 
 Document
 


 百度
 
 

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

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

問題是在于雙觸(Double-Tap)。即便是瀏覽器檢測出手指離開了屏幕,它仍然無法判斷接下來做什么。因為瀏覽器無法知道手指是會再次回到屏幕,還是就此結(jié)束觸發(fā)輕觸事件以及事件級聯(lián)。為了確定這一點,瀏覽器不得不等待一小段時間。瀏覽器開發(fā)者找到一個最佳時間間隔,就是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事件,但默認(rèn)行為不可避免

5、在document上的touchstart事件,阻止默認(rèn)行為。

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

接著,添加a標(biāo)簽的跳轉(zhuǎn)行為

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

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

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

事件對象

【基礎(chǔ)信息】

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

以touchstart為例,示例代碼如下

1、currentTarget屬性返回事件正在執(zhí)行的監(jiān)聽函數(shù)所綁定的節(jié)點

2、target屬性返回事件的實際目標(biāo)節(jié)點

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

//當(dāng)前目標(biāo)
currentTarget:[object HTMLDivElement]
//實際目標(biāo)
target:[object HTMLDivElement]
//實際目標(biāo)
srcElement:[object HTMLDivElement]

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

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

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

//事件流
eventPhase: 2
//可冒泡
bubbles: true
//默認(rèn)事件可取消
cancelable: true

【touchList】

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

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

2、changedTouches :導(dǎo)致觸摸事件被觸發(fā)的觸摸點數(shù)組

3、targetTouches:事件目標(biāo)元素上的觸摸點數(shù)組

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

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

【事件坐標(biāo)】

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

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

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

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

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

以上是“移動web開發(fā)之touch事件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


文章標(biāo)題:移動web開發(fā)之touch事件的示例分析-創(chuàng)新互聯(lián)
文章源于:http://weahome.cn/article/iedjp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部