2011-12-11 2 views
0

여기 논리를 파악할 수 없습니다. 마우스가 움직일 때까지 (utilBar) 숨어있는 요소가 있는데 타이머가 끝난 후에도 계속 나타나기를 원합니다. IF 마우스가 여전히 움직이고 있습니다. 분명히 내가 생각한 것은 마우스를 움직이면서 타이머를 시작하고 요소를 표시 한 것이고, 다른 마우스가있는 경우 첫 번째 타이머가 멈추고 반복적으로 시작하므로 타이머가 마우스가 움직이는 한 끝나지 않습니다.중지 표시 블럭 깜박임/자바 스크립트에서 타이머 없음 없음

마우스를 움직이면 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); 
}); 
+0

타이머 자체를 timerFunction에 전달하는 것처럼 보이므로 왜 window.utilBarTimer에서 clearTimeout을 호출합니까? – JesseBuesking

+0

잘 모르겠습니까? 타이머 함수를 취소하고 매번 새 함수를 시작합니다. window.utilBarTimer === utilBarTimer. "창"을 제거하면 (당신이 의미하는 것이 있다면?) 똑같은 일이 일어납니다. –

답변

1

그들은 방법 당신은 현재이 때마다 시간 제한을 마우스 이동을 취소하는 새로운 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입니다.

+0

Awh, 예. 나는 utilBarTimer가 있는지 확인하는 것에 대해서 생각조차하지 않았습니다. 감사합니다, 매력처럼 일하세요! –

관련 문제