Проверка активности движения мышью
Задача заключается в том, чтобы при отсутствии движения мышью над элементом, через N-ное количество времени вызывать функцию.
Код который у меня получился, кажется не совсем грамотным, не смотря на то, что вроде как и работает. Думаю должно быть более красивое решение. Прошу подсказать.
scene.addEventListener('mousemove', activity, false);
let move;
function activity(event) {
if(event) {
move = true;
console.log(move);
clearInterval(interval);
}
}
setInterval(function() {
interval= setTimeout(function() {
move = false;
console.log(move);
}, 1000);
}, 1000);
UPD: Нашел следующее решение
let notActiveDelay = 5,
timeNotActive = 0,
interval1,
interval2;
scene.addEventListener('mousemove', activity, false);
function activity() {
console.log('timeNotActive: 0');
timeNotActive = 0;
}
function intervals() {
int1 = setInterval(function() {
console.log('timeNotActive: ' + timeNotActive);
timeNotActive++;
}, 1000);
int2 = setInterval(function() {
if(timeNotActive >= notActiveDelay) {
console.log('Простой');
clearInterval(int1);
clearInterval(int2);
timeNotActive = 0;
test();
}
}, 1000);
}
intervals();
function test() {
setTimeout(function() {
intervals();
}, 5000);
}
Все ли в нем верно? |
spo,
две строки всего нужно в функции,1 остановить таймер 2 запустить таймер и всё |
spo,
scene.addEventListener('mousemove', activity, false);
var timer;
function activity(event) {
window.clearTimeout(timer);
timer = setTimeout(function() {
console.log('test');
}, 1000);
}
|
То что нужно.
Большое спасибо! |
Задача усложнилась.
Необходимо, чтобы после остановки таймера единожды срабатывало некоторое действие. Двигаем мышь, начинается отсчет и через N времени срабатывает событие. Если снова двигаем мышь, то единожды срабатывает другое событие, и снова начинается отсчет. |
spo,
уберите обнуление таймера, и событие сработает на любое передвижение, вас не понимаю или смотрите учебник там много чего https://learn.javascript.ru/task/hoverintent https://learn.javascript.ru/task/throttle |
Объясню на примере.
На сцене есть персонаж. Пока мы водим мышью ничего не происходит. Как только мы прекратили двигать мышью пошел отсчет времени и по истечении N секунд единожды запустилось действие (анимация - персонаж сел отдохнуть). При возобновлении движения мышью единожды запустилось другое действие (персонаж встал на ноги) |
spo,
:)
scene.addEventListener('mousemove', activity, false);
var timer;
function activity(event) {
if('персонаж сел отдохнуть') console.log('персонаж встал на ноги');
window.clearTimeout(timer);
timer = setTimeout(function() {
console.log('персонаж сел отдохнуть');
}, 1000);
}
|
Тут проблема в том, что при движении мышью мы получим множество сообщений персонаж встал на ноги, а нужно только один раз.
Вроде так работает
var timer,
flag = false;
function activity(event) {
if (flag) {
if('персонаж сел отдохнуть') console.log('персонаж встал на ноги');
flag = false;
}
window.clearTimeout(timer);
timer = setTimeout(function() {
console.log('персонаж сел отдохнуть');
flag = true;
}, 1000);
}
|
Цитата:
|
| Часовой пояс GMT +3, время: 00:23. |