Ответ 1
Я подозреваю, что вы сталкиваетесь с проблемой multi-touch...
Помните, что события касания не совпадают с событиями мыши. Вы можете касаться пальцами. Что произойдет, если вы коснетесь одним пальцем, чем добавьте второй палец? Вы получаете два последовательных события touchstart
. То же самое, вероятно, верно для touchend
. Я подозреваю, что пользователь light
прав, что он, вероятно, неправильно запускает отпечаток пальца...
Пожалуйста, посмотрите, что происходит с touches
, changedTouches
и targetTouches
свойствами TouchEvent. входите в своего слушателя. Я сильно подозреваю, что вы увидите, что все еще есть "палец", касающийся касания... Так что это было от 2 касаний до 1...
Удостоверившись, что трогательный палец (более не) - это тот, который на кнопке и т.д. намного проще, чем старые старые события mouseup
и mousedown
.
EDIT: Я понимаю, что ваша проблема связана с IE и событиями указателя... Однако они работают в основном тем же, что и они поддерживают мультитач (и могут, таким образом, вызывать те же проблемы). Я не вижу свойство, похожее на touches
, но я вижу pointerId
, который может дать вам ту же информацию (за счет некоторой бухгалтерии на вашем конце).
Эта страница MSDN содержит некоторую полезную информацию. Особенно этот фрагмент кода является просветляющим, я думаю:
function pointerdownHandler(evt) {
evt.target.setPointerCapture(evt.pointerId);
}
Это, по-видимому, подтверждает, что, когда палец попадает на поверхность, точка контакта получает идентификатор, который используется для информирования вас о том, какой палец покинул поверхность, когда вы получаете событие pointerup
.
Я бы добавил несколько журналов, которые просто печатают pointerId
на pointerdown
и pointerup
, и я готов поспорить, что вы быстро найдете свое решение.