首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不适用于jQuery的setTimeOut代码

不适用于jQuery的setTimeOut代码
EN

Stack Overflow用户
提问于 2012-09-29 23:21:49
回答 3查看 88关注 0票数 0

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

代码语言:javascript
运行
复制
$('.' + 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);


    }...

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-29 23:22:45

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

如果你想让你的函数以固定的时间间隔执行,你可能需要setInterval

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

代码语言:javascript
运行
复制
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);

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

或者,为了更好地兼容(请注意,我提供的链接也提供了IE的变通方法):

代码语言:javascript
运行
复制
var $elem = $(this);
t = setInterval( function(){
         $elem.find('img').first().appendTo('.' + container).fadeOut(500);
         $elem.find('img').first().fadeIn(800);    
}, viewSpeed);
票数 1
EN

Stack Overflow用户

发布于 2012-09-29 23:23:43

setTimeout在不带参数的情况下调用其回调。所以elem不会被传递给你的回调函数。如果您正在尝试执行自调用函数,那么您所要做的就是立即调用您的函数,而不是将回调传递给setTimeout()

我不知道您希望elem是什么,但如果您希望它成为悬停的项目,您可以这样做:

代码语言:javascript
运行
复制
$('.' + 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);
}...
票数 3
EN

Stack Overflow用户

发布于 2012-09-29 23:24:06

您将立即调用该函数,而不是将其用作回调(这无论如何都不会起作用,因为您需要传递一个参数),我想您的意思也是setInterval

代码语言:javascript
运行
复制
var elem = $(this);
var container = $('.' + container);

t = setInterval(function() {
        elem.find('img').first().appendTo(container).fadeOut(500);
        elem.find('img').first().fadeIn(800);
    }, viewSpeed);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12653948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档