Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 永远重复一个函数_Jquery - Fatal编程技术网

Jquery 永远重复一个函数

Jquery 永远重复一个函数,jquery,Jquery,通过以下步骤,我调用一个函数。函数等待,然后淡出图像,等待,然后淡入 function fadeOut() { $('img.my-image').delay(5000).fadeOut(500, function() { $('img.my-image').delay(5000).fadeIn(500); }); } fadeOut(); 如何使此函数永远重复?我可以在淡出函数的结束}之前放一行代码,让它从头开始吗 更新-这是我的Drupal站点。似乎代码应该可以工作 这是我

通过以下步骤,我调用一个函数。函数等待,然后淡出图像,等待,然后淡入

function fadeOut() {
  $('img.my-image').delay(5000).fadeOut(500, function() {
    $('img.my-image').delay(5000).fadeIn(500);
  });
}
fadeOut();
如何使此函数永远重复?我可以在淡出函数的结束}之前放一行代码,让它从头开始吗

更新-这是我的Drupal站点。似乎代码应该可以工作

这是我的确切密码:

$(document).ready(function() {
  if ( $(window).width() > 960) {
    function fadeOutFunc() {
      $('.image-list .bottom').delay(1000).fadeOut(500, function() {
        $('.image-list .bottom').delay(1000).fadeIn(500,fadeOutFunc);
      });
    }

    fadeOutFunc();
    // jQuery('.image-list .bottom').css('opacity','0.6');
  }    
});

是的,只要告诉它在
fadeIn
结束时调用自己即可。幸运的是,jQuery内置了对这一点的支持,您已经使用它在淡入淡出后淡入:

function fadeOut() {
    $('img.my-image').delay(5000).fadeOut(500, function() {
        $('img.my-image').delay(5000).fadeIn(500,fadeOut); // <-- see the tiny change?
    });
}

fadeOut();

如果是我,我会使用setInterval:

setInterval(function fadeOut() {
    $('img.my-image').delay(5000).fadeOut(500, function() {
        $('img.my-image').delay(5000).fadeIn(500);
    });
}, 1000);
这将每1秒加载一次函数,因为1000毫秒是1秒。它不会停止

编辑:您可以在任何时间内完成工作。只需使用它们作为秒数*1000作为2*1000或2000,持续2秒

这不是Jan Dovark的问题,您可以尝试使用以下代码:

$(window).focus(function() {

因此,当窗口选项卡处于焦点时,setInterval可以工作

可能会使用
setInterval
@Blender,为什么?每次同步块完成时,堆栈都会展开-剩下的是一堆挂起的超时。@Blender你确定吗?这没有嵌套的作用域,所以它不应该…jQuery的回调必须是低级别的事件驱动,所以这应该没问题。@JanDvorak:是的,它在900次迭代中就消失了。尝试删除
.delay()
调用,并将动画速度设置为
0
@Blender,这样您就已经从循环中完全删除了事件,因此在这种情况下,它将消失(jQuery将采用快捷方式并在同一范围内执行回调)有没有理由不使用setInterval?它似乎正是它的用途。这可能是更整洁的解决方案,但你需要使用11000而不是1000的间隔。出于类似的原因,它可能更难维持。不知道你为什么会被否决。如果一切顺利,你排队的动画需要11秒,所以你不应该每一两秒排队一次。即使你每11秒让它排队一次,如果浏览器打嗝并花时间调用一个重要的超时,东西也会开始排队——可能没什么大问题,但仍然不干净。投票被否决,因为这是一个脆弱的解决方案。如果间隔比动画短,jQuery动画队列将开始增长。如果间隔较长,则可能很难调试暂停的原因。每次更改函数内的计时时,都必须将更改传播到间隔。很容易忘记。@Dave即使您正确设置了计时,如果出现延迟(它会),jQuery队列也会建立起来。想象一下把水倒进漏斗里。与漏斗最大值相比,吞吐量将减少,或者漏斗将溢出。更好的解决方案:每次漏斗空了时,向漏斗中倒入一些水-这样可以最大限度地提高吞吐量,漏斗不会溢出。使用此方法可以最大限度地减少问题。focus(function(){因此,该函数仅在窗口处于焦点时运行。
$(window).focus(function() {