2016-11-08 1 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; 
}); 

КСН 9, хотя эта дельта всегда 0 для смежных touchmove событий (зажатой между теми же touchstart и touchend событий) ,

На 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 создает новые объекты события каждый отправка, но утилизацииTouch объектов в touches массив.

Код работает, как ожидалось, в iOS 10, потому что он, похоже, не делает тот же пул объектов Touch.

Я собираюсь отметить это как ответ, но если кто-то узнает что-либо релевантное: коснитесь объекта или его оптимизации (предположим, что это оптимизация ...) в WebKit, пожалуйста, поделитесь!

Смежные вопросы