Обработка нескольких событий указателя в IE11 Metro/Mobile с разрешенными сенсорными действиями pan-x и pan-y
У меня есть веб-приложение, в котором я хочу обрабатывать жест масштабирования в javascript, а не разрешать браузеру масштабировать весь пользовательский интерфейс. Насколько я понимаю, в IE11 вам нужно указать CSS сенсорного действия для элемента, для которого вы хотите обрабатывать события указателя.
В моем приложении я отключил все сенсорные действия, кроме панорамирования (touch-action: pan-x pan-y). Я связал события указателя вниз, указателя и перемещения указателя в javascript и добавил собственные расчеты, чтобы определить уровень масштабирования, который нужно выполнить, основываясь на расстоянии между двумя активными указателями (жест пинч).
В IE11 на рабочем столе это работает именно так, как я ожидал; тем не менее, в мобильной версии IE / метро (я тестировал на Surface Pro) я никогда не смогу обнаружить более одного события указателя в данный момент времени. Он просто запускает указатель отмены на первое захваченное событие и не запускает второй указатель вниз. Если я отключу все сенсорные жесты (touch-action: none), я смогу получать события указателя multi-touch также в мобильном браузере, но он больше не позволяет панорамирование, что нежелательно.
Вот простой jsfiddle, который демонстрирует проблему:
http://jsfiddle.net/wqgg0Ly7/22/
$(document).ready(function()
{
var pointers = [];
function pointerDown(e)
{
pointers.push(e);
if (pointers.length >= 2)
alert("multiple pointers detected");
};
function pointerOut(e)
{
for (var i in pointers)
if (pointers[i].pointerId == e.pointerId)
pointers.splice(i, 1);
};
$(".container")
.on("pointerdown", pointerDown)
.on("pointerout", pointerOut)
.on("pointercancel", pointerOut);
});
};
Если вы протестируете это в версии IE11 для настольных ПК на устройстве с сенсорным экраном, вы можете зажать любой из этих DIV, и вы увидите предупреждение об обнаружении двух указателей. Выполняя этот же тест в мобильном телефоне IE11, и только первый DIV обнаружит второй указатель; однако, это не позволяет панорамирование как второй DIV.
Это просто ошибка в IE Metro или есть обходной путь, позволяющий выполнять панорамирование элемента, но при этом захватывать несколько событий указателя?