Mobile Safari(iOS 9)Touch.clientX/Y在发送时没有被实现吗?

问题描述:

用于计算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三角形的计算公式为你所期望的。

我不明白为什么!

修改例如添加额外的检查:

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中触摸对象回收或相关优化(我认为这是一个优化...),请分享!