Прекратить мигание блока дисплея - PullRequest
0 голосов
/ 12 декабря 2011

Я не могу понять логику здесь.У меня есть элемент, который скрывается, пока мышь не перемещается (utilBar), и я хочу, чтобы он оставался отображенным даже после окончания таймера ЕСЛИ мышь все еще движется.Очевидно, что я подумал, что при перемещении мыши запустите таймер и отобразите элемент, и если после первого движения мыши будет другое движение, остановите таймер и запустите его снова и снова, поэтому таймер никогда не заканчивается, пока мышь движется.

Проблема в том, что мой элемент мигает после того, как 1000 миллисекунд начинают мигать, когда я двигаю мышь.Я думаю, что я просто ломаю логику здесь, но я не могу понять это.

//Separate function to pass in utilBarTimer into the setTimeout
function timerFunction(utilBarTimer){
  self.iframe.addEventListener('mousemove',function(){
    clearTimeout(window.utilBarTimer);
  });
  utilBar.style.display = 'none';
}
self.iframe.addEventListener('mousemove',function(){
  utilBar.style.display = 'block';
  var utilBarTimer = window.setTimeout(function(){
    timerFunction(utilBarTimer)
  },1000);
});

1 Ответ

1 голос
/ 12 декабря 2011

То, как вы сейчас это делаете, - это создание нового EventListener, который будет очищать тайм-аут при каждом движении мыши. Я думаю, что логика, которую вы ищете, такова:

var utilBar = document.getElementById('utilBar'),
    utilBarTimer;

window.addEventListener('mousemove', function() {
    utilBar.style.display = 'block';

    // if we have a timer already running, kill it out
    if (utilBarTimer) {
        clearTimeout(utilBarTimer);   
    }

    // begin a new timer that hides our object after 1000 ms
    utilBarTimer = window.setTimeout(function() {
        utilBar.style.display = 'none';
    }, 1000);
});

Вот jsfiddle этого в действии.

...