Mobile Safari (iOS 9) Touch.clientX/Y 发货时未具体化?
Mobile Safari (iOS 9) Touch.clientX/Y not reified at time of dispatch?
计算 touchmove
事件之间差异的简单方法可能如下所示:
var lastEvent;
window.addEventListener('touchmove', function(event) {
if (lastEvent) {
console.log(event.touches[0].clientY - lastEvent.touches[0].clientY);
}
lastEvent = event;
});
在 iOS 9 上,对于连续的 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 每次分派都在创建新的事件对象,但是 回收 Touch
数组中的 touches
个对象。
该代码在 iOS 10 中按预期工作,因为它似乎没有执行相同的 Touch 对象池。
我打算将此标记为答案,但如果有人碰巧知道任何相关信息:WebKit 中的触摸对象回收或相关优化(我认为这是优化...),请分享!
计算 touchmove
事件之间差异的简单方法可能如下所示:
var lastEvent;
window.addEventListener('touchmove', function(event) {
if (lastEvent) {
console.log(event.touches[0].clientY - lastEvent.touches[0].clientY);
}
lastEvent = event;
});
在 iOS 9 上,对于连续的 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 每次分派都在创建新的事件对象,但是 回收 Touch
数组中的 touches
个对象。
该代码在 iOS 10 中按预期工作,因为它似乎没有执行相同的 Touch 对象池。
我打算将此标记为答案,但如果有人碰巧知道任何相关信息:WebKit 中的触摸对象回收或相关优化(我认为这是优化...),请分享!