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
事件(夹在相同touchstart
和touchend
事件之间) 。
在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创建新的事件对象的每一个调度,但回收在touches
Touch
对象阵列。
该代码在iOS 10中按预期工作,因为它似乎没有执行相同的Touch对象池。我想将这个标记为答案,但是如果有人碰巧知道任何相关的东西:在WebKit中触摸对象回收或相关优化(我认为这是一个优化...),请分享!