Проверка активности движения мышью
Задача заключается в том, чтобы при отсутствии движения мышью над элементом, через 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, время: 12:35. |