使用setTimeout延迟jQuery动画

使用setTimeout延迟jQuery动画,jquery,animation,delay,settimeout,Jquery,Animation,Delay,Settimeout,当用户按下按钮移动到下一个图像时,我正在处理图像上的一些输出转换。当多个图像相邻且非常窄时,这些图像将同时过渡。因此,我检查图像的宽度,将较薄的图像添加到数组中,然后对数组中的每个对象运行转换。我想在数组中每个图像的动画之间创建一点延迟,所以我尝试在1秒钟超时后运行jQuery.animate 以下是我尝试让超时正常工作但未成功的方法: 一, 我使用CMS的闭包示例来实现它。但是,现在我遇到了一个新问题。转换仅在第二个图像中发生。当有三个图像时,它将进入动画图像1、延迟、动画图像2、动画图像3。

当用户按下按钮移动到下一个图像时,我正在处理图像上的一些输出转换。当多个图像相邻且非常窄时,这些图像将同时过渡。因此,我检查图像的宽度,将较薄的图像添加到数组中,然后对数组中的每个对象运行转换。我想在数组中每个图像的动画之间创建一点延迟,所以我尝试在1秒钟超时后运行jQuery.animate

以下是我尝试让超时正常工作但未成功的方法:

一,

我使用CMS的闭包示例来实现它。但是,现在我遇到了一个新问题。转换仅在第二个图像中发生。当有三个图像时,它将进入动画图像1、延迟、动画图像2、动画图像3。2点到3点之间没有延迟

以下是新代码:

for (i=0; i < set.length; i++) {
    (function(i) {
        if (i != 0) {

            function tempTransition() {
                set[i].transitionOut( $('#gallery'), 562 );
            }
            setTimeout(tempTransition, 200);
        } else {
            set[i].transitionOut( $('#gallery'), 562 );
        }
    })(i);
}
for(i=0;i
对于定时动画/效果而言,使用超时是一件棘手的事情

我没有测试您的代码,但通过浏览它,我注意到您正在使用
setTimeout
,而没有任何东西来清除它们

当用户在“延迟”期间触发事件时会发生什么?你也必须实施一些措施来管理它


很抱歉,我现在没有答案给你,可能是等我有更多的时间,或者有人提出了更优雅的解决方案时。

对于定时动画/效果来说,使用超时是一件很棘手的事情

我没有测试您的代码,但通过浏览它,我注意到您正在使用
setTimeout
,而没有任何东西来清除它们

当用户在“延迟”期间触发事件时会发生什么?你也必须实施一些措施来管理它

很抱歉,我现在没有答案,可能是我以后有更多的时间,或者有人提出了更优雅的解决方案。

jquery fadeOut允许您创建回调,这是一个可以在fadeOut完成时运行的函数。因此,如果您愿意,您可以将淡色链接在一起,以便在一个淡色结束时调用下一个淡色。如果这不是你想要的,我可能误解了你的问题

另外,在示例3中,我认为您希望这样编写它,而不希望将函数定义传递给setTimeout,因为这样做没有任何作用

setTimeout('set[i].transitionOut($("#gallery"), 562)', 100);
jqueryfadeout允许您创建回调,这是一个可以在fadeOut完成时运行的函数。因此,如果您愿意,您可以将淡色链接在一起,以便在一个淡色结束时调用下一个淡色。如果这不是你想要的,我可能误解了你的问题

另外,在示例3中,我认为您希望这样编写它,而不希望将函数定义传递给setTimeout,因为这样做没有任何作用

setTimeout('set[i].transitionOut($("#gallery"), 562)', 100);

通过查看您的代码,我认为您已经遇到了,这可能是我见过的最常见的问题,当人们使用循环和嵌套函数时

setTimeout
回调函数引用的
i
变量,是相同的(因为JavaScript只有函数作用域,而不是块作用域),当异步执行这些函数时,循环已经完成,对于使用
setTimeout
的所有情况,
i
变量将包含
set.length-1

像往常一样,尝试使用另一个闭包捕获
i
变量:

for (var i=0; i < set.length; i++) {
  (function (i) {
    if (i != 0) {
        setTimeout(function() { set[i].transitionOut($('#gallery'), 562) }, 100);
    } else {
        set[i].transitionOut( $('#gallery'), 562 );
    }
  })(i);
}
for(变量i=0;i
通过查看您的代码,我认为您遇到了,这可能是我见过的人们在使用循环和嵌套函数时最常见的问题

setTimeout
回调函数引用的
i
变量,是相同的(因为JavaScript只有函数作用域,而不是块作用域),当异步执行这些函数时,循环已经完成,对于使用
setTimeout
的所有情况,
i
变量将包含
set.length-1

像往常一样,尝试使用另一个闭包捕获
i
变量:

for (var i=0; i < set.length; i++) {
  (function (i) {
    if (i != 0) {
        setTimeout(function() { set[i].transitionOut($('#gallery'), 562) }, 100);
    } else {
        set[i].transitionOut( $('#gallery'), 562 );
    }
  })(i);
}
for(变量i=0;i
什么是
输出转换
功能?你能提供那个密码吗?当然。我把它添加到了我原来的问题中。什么是
转换输出
函数?你能提供那个密码吗?当然。我已经把它添加到我原来的问题中了。谢谢。这帮助我跨过了第一个障碍感谢这帮助我跨过了第一个障碍
setTimeout('set[i].transitionOut($("#gallery"), 562)', 100);
for (var i=0; i < set.length; i++) {
  (function (i) {
    if (i != 0) {
        setTimeout(function() { set[i].transitionOut($('#gallery'), 562) }, 100);
    } else {
        set[i].transitionOut( $('#gallery'), 562 );
    }
  })(i);
}