0

我有这段代码,但它只执行一次......

$('.' + 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);


    }...

知道我做错了什么吗?谢谢!

4

3 回答 3

3

setTimeout不带参数调用它的回调。所以elem不会传递给你的回调。如果您尝试执行自调用函数,那么您所做的就是立即调用您的函数,而不是将回调传递给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);
}...
于 2012-09-29T15:23:42.683 回答
1

setTimeout只调用一次回调,这很正常。

如果您希望函数定期执行,也许您需要setInterval 。

而且,顺便说一句,您的代码中还有另一个错误:您可能想要

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);

回调传递setInterval或传递setTimeout给回调的参数在持续时间之后。

或者,为了更加兼容(请注意,我提供的链接也提供了 IE 的解决方法):

var $elem = $(this);
t = setInterval( function(){
         $elem.find('img').first().appendTo('.' + container).fadeOut(500);
         $elem.find('img').first().fadeIn(800);    
}, viewSpeed);
于 2012-09-29T15:22:44.667 回答
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);
于 2012-09-29T15:24:06.460 回答