2016-12-07 4 views
3

mouseenter 이벤트에 카운팅을 시작한 다음 mouseleave 이벤트에서 카운팅을 중지하고 싶습니다. 그러나이 예제의 콘솔에서 볼 수 있듯이 mouseleave 내부의 clearInterval(timerId) 명령이 작동하지 않습니다.clearInterval (timerId)이 작동하지 않습니다.

무엇이 문제입니까? 하나는 - 당신은 외부 범위에 같은 이름의 변수를 숨기고 timerId의 이름 당신의 startcounting()increment() 기능의 매개 변수를 가지고 있기 때문에

var timerId; 
 
clearInterval(timerId); 
 

 
$("#demo").mouseenter(function() { 
 
    setTimeout(function() { 
 
    startcounting(timerId); 
 
    }, 2000) 
 
}); 
 

 
$("#demo").mouseleave(function() { 
 
    clearInterval(timerId); 
 
}); 
 

 
function startcounting(timerId) { 
 
    var number = 0; 
 
    timerId = setInterval(function() { 
 
    increment(timerId); 
 
    }, 100); 
 

 
    function increment(timerId) { 
 
    if (number >= 100) { 
 
     number = 0; 
 
     clearInterval(timerId); 
 
    } else { 
 
     number++; 
 
     console.log(number); 
 
    } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="demo">demo</div>

+0

모든 관련 코드가 jsFiddle가 다운 될 경우에 대비, 질문에 배치되어야 함을 유의하시기 바랍니다. 그 일이 일어난다면 당신의 질문은 대답 할 수 없었을 것입니다. –

+0

댓글을 주셔서 대단히 감사합니다! 나는 여기 새로 왔어. 너가 나에게 말하지 않으면 나는 그걸 생각할 수 없다. – themis93

답변

3

문제입니다 필요한 것. 당신이 그 속성을 제거하면

는 코드가 작동합니다

var timerId; 
 
clearInterval(timerId); 
 

 
$("#demo").mouseenter(function() { 
 
    setTimeout(function() { 
 
     startcounting(); // remove here 
 
    }, 2000) 
 
}); 
 

 
$("#demo").mouseleave(function() { 
 
    clearInterval(timerId); 
 
}); 
 

 
function startcounting() { // remove here 
 
    var number = 0; 
 
    timerId = setInterval(function() { 
 
     increment(timerId); 
 
    }, 100); 
 

 
    function increment() { // remove here 
 
     if (number >= 100) { 
 
      number = 0; 
 
      clearInterval(timerId); 
 
     } else { 
 
      number++; 
 
      console.log(number); 
 
     } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="demo">demo</div>

+0

질문에서 한 것처럼 코드 조각을 코드 조각에 삽입했습니다. 이 작업을 검토하고 업데이트하거나이 작업에 반대하면 롤백 할 수 있습니다. – doppelgreener

+0

@ doppelgreener 아무 문제 없지만, 감사합니다 –

+0

대단히 감사합니다! – themis93