觸摸事件
- 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ā)時間,文檔中并沒有具體說明,咱們只能去猜測了。
每個觸摸事件都包括了三個觸摸列表:
- touches:當(dāng)前屏幕上所有觸摸點的集合列表
- targetTouches: 綁定事件的那個結(jié)點上的觸摸點的集合列表
- changedTouches: 觸發(fā)事件時改變的觸摸點的集合
舉例來說,比如div1, div2只有div2綁定了touchstart事件,第一次放下一個手指在div2上,觸發(fā)了touchstart事件,這個時候,三個集合的內(nèi)容是一樣的,都包含這個手指的touch,然后,再放下兩個手指一個在div1上,一個在div2上,這個時候又會觸發(fā)事件,但changedTouches里面只包含第二個第三個手指的信息,因為第一個沒有發(fā)生變化,而targetTouches包含的是在第一個手指和第三個在div2上的手指集合,touches包含屏幕上所有手指的信息,也就是三個手指。
每個Touch對象包含的屬性如下:
{
screenX: 511,
screenY: 400,//觸點相對于屏幕左邊沿的Y坐標
clientX: 244.37899780273438, //觸摸目標在視口中的x坐標。
clientY: 189.3820037841797,//相對于可視區(qū)域
pageX: 244.37,
pageY: 189.37,//相對于HTML文檔頂部,當(dāng)頁面有滾動的時候與clientX=Y 不等
force: 1,//壓力大小,是從0.0(沒有壓力)到1.0(最大壓力)的浮點數(shù)
identifier: 1036403715,//一次觸摸動作的唯一標識符
radiusX: 37.565673828125, //能夠包圍用戶和觸摸平面的接觸面的最小橢圓的水平軸(X軸)半徑
radiusY: 37.565673828125,
rotationAngle: 0,//它是這樣一個角度值:由radiusX 和 radiusY 描述的正方向的橢圓,需要通過順時針旋轉(zhuǎn)這個角度值,才能最精確地覆蓋住用戶和觸摸平面的接觸面
target: {} // 此次觸摸事件的目標element
}
identifier
使用 Chrome 的模擬器發(fā)現(xiàn)多次觸摸動作,值始終不變。用真機測試則不會有問題(用的safari連接mac調(diào)試可以)。每次觸摸包括start,move,end這整個過程,標志符都不變。下一次觸摸動作開始,標志符就會變化。
screenY clientY
在 safari 中 screenY與clientY值是相等的,在iOS微信中兩個數(shù)值不等,但單位應(yīng)該也不一樣。
radiusX radiusY rotationAngle
測試過程中safari及微信內(nèi)置瀏覽器都不支持這些屬性,chrome模擬器可以。