2016-11-08 57 views
0

用於計算touchmove事件之間的增量可能看起來像一個簡單的方法:Mobile Safari(iOS 9)Touch.clientX/Y在發送時沒有被實現嗎?

var lastEvent; 
window.addEventListener('touchmove', function(event) { 
    if (lastEvent) { 
    console.log(event.touches[0].clientY - lastEvent.touches[0].clientY); 
    } 
    lastEvent = event; 
}); 

在iOS 9,雖然,此增量是總是0對於連續touchmove事件(夾在相同touchstarttouchend事件之間) 。

在iOS上10三角形的計算公式爲你所期望的。

我不明白爲什麼!

回答

0

修改例如添加額外的檢查:

var lastEvent; 
window.addEventListener('touchmove', function(event) { 
    if (lastEvent) { 
    console.log('same event?', event === lastEvent) 
    console.log('same touch?', event.touches[0] === lastEvent.touches[0]) 
    console.log('delta', event.touches[0].clientY - lastEvent.touches[0].clientY); 
    } 
    lastEvent = event; 
}); 

產量:

same event? false 
same touch? true 
delta 0 

看來,iOS版9創建新的事件對象的每一個調度,但回收在touchesTouch對象陣列。

該代碼在iOS 10中按預期工作,因爲它似乎沒有執行相同的Touch對象池。我想將這個標記爲答案,但是如果有人碰巧知道任何相關的東西:在WebKit中觸摸對象回收或相關優化(我認爲這是一個優化...),請分享!