Я не могу получить событие pointerup
для ссылки (тег A
с установленным атрибутом href
) для event.pointerType == 'mouse'
, если мышь была перемещена между pointerdown
и pointerup
.
У меня есть следующий сценарий:
var lastEvent = false;
var handler = function (e) {
if (lastEvent != e.type) {
e.target.innerHTML += e.type + ' with ' + e.pointerType + '<br/>';
e.target.scrollTo(0, e.target.scrollHeight);
}
lastEvent = e.type;
}
document.querySelector('a').addEventListener('pointerdown', handler);
document.querySelector('a').addEventListener('pointermove', handler);
document.querySelector('a').addEventListener('pointerup', handler);
div {
height: 100vh;
display: flex;
}
a {
height: 60vh;
width: 75vw;
margin: auto;
background-color: red;
display: inline-block;
user-select: none;
touch-action: none;
overflow-y: scroll;
}
<div>
<a href="#"></a>
</div>
Если я нажимаю кнопку мыши, удерживаю ее некоторое время, а затем отпускаю, я получаю следующую последовательность:
- указатель вниз с помощью мыши
- указатель вверх с помощью мыши
Однако, если я нажимаю кнопку мыши, удерживаю ее нажатой и перемещаю указатель мыши вокруг, а затем отпускаю ее, я получаю этопоследовательность:
- указатель с помощью мыши
- указатель с помощью мыши
Проблема: указатель никогда не срабатывает.
Я думаю, это встроенный-в функции щелчка или перетаскивания в браузере (я проверял в Chrome), который блокирует событие pointerup
от запуска, потому что если сделать это на span
или удалить href
из ссылки привязки, с которой он работаетэта последовательность:
- указатель с помощью мыши
- указатель с помощью мыши
- указатель с помощью мыши
Кроме того, он работает безупречно для сенсорногоуправляемый PointerEvents
:
- указатель вниз с прикосновением
- указатель перемещенияh touch
- pointerup with touch
Я полагаю, что для элемента, отключающего эту защиту pointerup
, нужно установить умное свойство css.Что-то вроде a { pointer-actions: click; }
, но я не смог что найти.