2012-09-29 2 views
0

이 코드를 가지고 있지만, 한 번만 실행하여의 setTimeout 코드는 ... jQuery를

$('.' + container).hover(function() { 
     t = setTimeout(function(elem){ 
      //this should be executed as long as I hover, 
      //with interval declared in viewSpped variable 
      $(elem).find('img').first().appendTo('.' + container).fadeOut(500); 
      $(elem).find('img').first().fadeIn(800);  

     }(this), viewSpeed); 


    }... 

내가 잘못 어떤 생각을 작동하지? 감사!

+0

이 함수는 setTimeout에 전달하는 대신 실행 중입니다. 함수 문장 뒤에'(this)'를 버린다. –

+0

간단한 기능을 왜곡하고 부러 뜨릴 수있는 다른 방법을보고 다른 것을 비난하는 것은 항상 재미 있습니다. –

답변

1

setTimeout은 보통 콜백을 한 번만 호출합니다.

기능을 정기적으로 실행하려면 setInterval을 원할 수도 있습니다.

는 그리고, incidently, 코드에서 다른 오류가있다 : 당신은 아마 기간 이후에있는 콜백 setInterval 또는 setTimeout 통과

t = setInterval(function(elem){ 
     //this should be executed as long as I hover, 
     //with interval declared in viewSpped variable 
     $(elem).find('img').first().appendTo('.' + container).fadeOut(500); 
     $(elem).find('img').first().fadeIn(800);  
    }, viewSpeed, this); 

인수를 원한다.

또는, (나는 또한 제공하는 링크가 IE에 대한 해결 방법을 제공합니다 있습니다) 더 호환되도록하기 :

var $elem = $(this); 
t = setInterval(function(){ 
        $elem.find('img').first().appendTo('.' + container).fadeOut(500); 
        $elem.find('img').first().fadeIn(800);     
}, viewSpeed); 
+0

루프에서 setTimeout을 사용하는 것이 더 낫지 만 setInterval의 사용을 권장하지 않겠습니까? – jeremy

+1

@Nile - "setInterval은 루프에서 사용하지 않아야합니다."라고 말하는 것은 부적절하지 않습니까? 내 말은,'setInterval'은 또 무엇을 하는가? –

+0

$ in $ elem에 대해 나에게 약간의 아이디어를 줄 수 있습니까? 이 것은 저에게 완벽하게 작동합니다. 모든 답변을 주셔서 대단히 감사합니다 ... – Emkey

3

setTimeout는 인수없이 콜백을 호출합니다. 따라서 elem은 콜백에 전달되지 않습니다. self-invoking 함수를 수행하려고한다면 콜백을 setTimeout()에 전달하지 않고 즉시 함수를 호출하는 것뿐입니다.

난 당신이 elem이 될 것으로 기대 모르겠어요,하지만 당신이 공중 선회 된 항목 수 있도록하려면, 당신은 같은 것을 할 것이다 : 당신은 즉시 함수를 호출하고

$('.' + container).hover(function() { 
    var self = $(this); 
    t = setTimeout(function(){ 
     //this should be executed as long as I hover, 
     //with interval declared in viewSpped variable 
     self.find('img').first().appendTo('.' + container).fadeOut(500); 
     self.find('img').first().fadeIn(800);  

    }, viewSpeed); 
}... 
+0

콜백에 전달할 매개 변수를 setTimeout에 제공 할 수 있습니다. https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout –

+1

@dystroy - 예, 일부 브라우저에서만 사용할 수 있습니다 (doesn IE에서 작동하지 않음).콜백에서 참조 할 수있는 변수로 문제를 해결하는 것이 훨씬 안전합니다. – jfriend00

+0

@dystroy : 그것은 보편적으로 호환되지 않습니다. – Ryan

1

을 콜백으로 사용하는 대신 (매개 변수를 전달해야하므로 어쨌든 작동하지 않을 것입니다), 나는 또한 당신이 setInterval을 의미한다고 생각합니다.

var elem = $(this); 
var container = $('.' + container); 

t = setInterval(function() { 
     elem.find('img').first().appendTo(container).fadeOut(500); 
     elem.find('img').first().fadeIn(800); 
    }, viewSpeed); 
+0

여기에 잡히지 않은 구문 오류가 있습니다 ... – Emkey

+0

@Emkey : ... where? – Ryan

+0

나는 그것을 고정했지만, 내가 움직이지만 appendTo는 작동하지 않는 것처럼 보입니다. – Emkey