Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Нужна помощь по setTimeout (https://javascript.ru/forum/events/57239-nuzhna-pomoshh-po-settimeout.html)

CraftLawrence 26.07.2015 04:38

Нужна помощь по setTimeout
 
Делаю простенький видеоплеер с помощью <video>
Хочу сделать так, чтобы панель с кнопками внизу скрывалась через 3 секунды после последнего движения мышки.

<div id="controlbar" style="visibility: hidden;"></div>// ну якобы панель с кнопками


document.getElementById("videoPlayer").onmousemove = function() {
	clearTimeout(timer); // сбиваю запущенный на предыдущем движении мышки таймер
	showcontrolbar(); // показываю панель
	var timer = setTimeout(hidecontrolbar, 3000); // скрываю панель через 3с
}

В итоге получаю следующее: если двинуть мышкой и не трогать, то все корректно, а если двигать мышкой в течении 5+ секунд, то через 3 секунды панель начинает адово мигать, т.к. не прекратившееся движение мыши вызывает панель, а таймер из прошлого скрывает ее.

Как сделать так, чтобы панель появлялась при первом же сдвиге мышки и пропадала после того как перестать ею двигать на 3 секунды?


p.s. Функциии showcontrolbar и hidecontrolbar - по одной строчке кода. Банальное управление стилем visibility через document.getElementById
p.s.s Если в начале функции прописать
if (timer) alert("i`m alive!");
то ничего не произойдет! Выходит, мой clearInterval ничего не останавливает, т.к. на момент запуска функции почему-то нету такого таймера, хотя он по любому должен был работать с предыдущего движения мышки.

devote 26.07.2015 20:01

Цитата:

Сообщение от CraftLawrence
var timer

нужно объявить вне текущего скоупа, тоесть вне функции onmousemove

DynkanMaclaud 27.07.2015 15:42

Лови привет от Viral

CraftLawrence 27.07.2015 21:33

Цитата:

Сообщение от devote (Сообщение 381599)
нужно объявить вне текущего скоупа, тоесть вне функции onmousemove

Цитата:

Сообщение от DynkanMaclaud (Сообщение 381701)

Боже мой, спасибо огромное)
Все работает.


Часовой пояс GMT +3, время: 07:57.