Как обнаружить, когда mousemove остановился
Как можно обнаружить с помощью eventListener, когда mousemove
закончил?
document.AddEventListener('mousemove', startInteractionTimer, false);
function startInteractionTimer(){
clearInterval(touchInterval);
touchInterval = setInterval(noAction, 6000);
}
Я хочу запустить функцию startInteractionTimer
сразу после завершения mousemove, и я хотел бы это поймать. В приведенном выше примере кода он запускается, если мышь перемещается.
Спасибо
Изменить: Хорошо, я ответил на свой вопрос, а script выше - ^ отлично.
Ответы
Ответ 1
Вы всегда можете создать для него настраиваемое событие:
(function ($) {
var timeout;
$(document).on('mousemove', function (event) {
if (timeout !== undefined) {
window.clearTimeout(timeout);
}
timeout = window.setTimeout(function () {
// trigger the new event on event.target, so that it can bubble appropriately
$(event.target).trigger('mousemoveend');
}, 100);
});
}(jQuery));
Теперь вы можете просто сделать это:
$('#my-el').on('mousemoveend', function () {
...
});
Edit:
Кроме того, для согласованности с другими событиями jQuery:
(function ($) {
$.fn.mousemoveend = function (cb) {
return this.on('mousemoveend', cb);
});
}(jQuery));
Теперь вы можете:
$('#my-el').mousemoveend(fn);
Ответ 2
Вы можете попробовать установить/очистить тайм-аут только для обнаружения конца перемещения мыши...
var x;
document.addEventListener('mousemove', function() {
if (x) clearTimeout(x);
x = setTimeout(startInteractionTimer, 200);
}, false);
Как долго вы хотите ждать, зависит от вас. Я не знаю, как долго вы хотите сказать, "конец мусмове"
Пример: http://jsfiddle.net/jeffshaver/ZjHD6/
Ответ 3
Вот еще одно решение для пользовательских событий, но без jQuery. Он создает событие с именем mousestop
, которое будет запущено на элементе, на котором указатель мыши включен. Он будет пузыриться, как и другие события мыши.
Итак, как только вы включите этот фрагмент кода, вы можете добавить прослушиватели событий к любому элементу с помощью addEventListener('mousestop', fn)
:
(function (mouseStopDelay) {
var timeout;
document.addEventListener('mousemove', function (e) {
clearTimeout(timeout);
timeout = setTimeout(function () {
var event = new CustomEvent("mousestop", {
detail: {
clientX: e.clientX,
clientY: e.clientY
},
bubbles: true,
cancelable: true
});
e.target.dispatchEvent(event);
}, mouseStopDelay);
});
}(1000));
// Example use
document.getElementById('link').addEventListener('mousestop', function(e) {
console.log('You stopped your mouse while on the link');
console.log('Mouse coordinates are: ', e.detail.clientX, e.detail.clientY);
// The event will bubble up to parent elements.
});
<h1>Title</h1>
<div>
content content<br>
<a id="link" href="#">stop your mouse over this link for 1 second</a><br>
content content content
</div>