2012-06-12 4 views
-1

이 코드 줄이 있지만 작동하지 않으며 함수가 문제의 원인이라고 추측합니다. 내 JavaScript는 다음과 같습니다.clearTimeout() 함수가 제대로 작동하지 않습니다.

$(document).ready(function() { 
    var interval; 

    function move(ele) { 
     $(ele).animate({ 
      'background-position-y': '0px' 
     }, 200, function() { 
      $(ele).animate({ 
       'background-position-y': '3px' 
      }, 200, function() { 
       interval = setTimeout(function() { 
        move(ele) 
       }, 3); 
      }); 
     }); 
    }; 
    $(".up").hover(function() { 
     move(this), function() { 
      clearTimeout(interval); 
      interval = null; 
      $(this).css("background-position", "80px 3px "); 
     }; 
    }); 

내가 여기서 잘못하고있는 것을 누군가가 설명 할 수 있습니까?

+0

'hover' 핸들러에서 첫 번째 기능을 제대로 종료하지 않았습니다. 대신에 다른 하나는 중첩 된 것입니다. – apsillers

+1

나는이 질문이 미래의 어떤 방문객을 도울 가능성이 적기 때문에 투표를 끝내기로 결정했다. 일반적으로 인터넷의 전 세계 시청자에게 적용 할 수없는 매우 좁은 상황에만 관련이 있습니다. 이 질문을 더 폭넓게 적용 할 수 있도록 도움을 받으려면 FAQ를 참조하십시오. " –

+0

Firefox는'background-position-x' 및'background-position-y' 속성을 지원하지 않습니다. 경우에 따라 –

답변

1

David에 의해 제안 된 적절한 닫는 중괄호가 있더라도 여전히 애니메이션을 계속 유지하는 문제가 있습니다. 타이머 (간격)를 지우면 .animate()에 전달 된 콜백 함수가 실행되지 않습니다. 따라서 interval = setTimeout(...)은 여전히 ​​실행되어 애니메이션주기를 영속화합니다.

전역 변수를 제거하는 것과 같은 몇 가지 개선 사항이 있지만 작업 예제에서는 코드를 약간 수정했습니다. http://jsfiddle.net/aKKRk/

+0

고맙습니다. 솔루션으로 제 문제가 해결되었습니다. 나는이 사실을 확인하기 위해 true와 false를 사용할 수 있다는 것을 완전히 잊었다. 이것이 내가 타임 아웃과 간격을 사용하는 것을 좋아하지 않는 이유입니다. 다시 한 번 감사드립니다. – Mentalhead

1

오류가 발생했습니다. 실제로 인 것처럼 보입니다. 문제는 두 가지가 아니라 하나의 기능 만 hover 번으로 전달하는 것입니다. ….hover(function() { move(…); }, function() { … }) 대신 ….hover(function() { move(…), function() { … } })이 표시됩니다.

앞으로는 코드를 들여 쓰는 습관을 짓는다면 이러한 종류의 오류를 발견하는 것이 훨씬 쉬울 것입니다.

+0

나는 당신이 말한대로했으나 clearTimeout은 작동하지 않으며, 함수는 계속 반복됩니다. – Mentalhead

+0

'clearTimeout'이 실제로 호출되고 있습니까? 확실하지 않은 경우 : 디버거 나 로그 등을 사용하여 확인하십시오. 호출되지 않는 경우 새 코드로 질문을 업데이트하십시오. –

+0

그 방법을 설명해 주시겠습니까? Chrome의 검사 요소 옵션을 사용하고 있지만 찾을 수없는 것 같습니다. – Mentalhead

관련 문제