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