我有这段代码,但只执行一次......
$('.' + 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 :(得分: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);
}...
答案 1 :(得分: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);
答案 2 :(得分: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);