繁体   English   中英

比setInterval更好的方法?

[英]Better way than setInterval?

我在下面有当前函数,但是感觉有一种更好的方法可以写同样的东西。 我正在寻找一些最优化的方式来编写以下相同功能的见解,以及原因。

注意,这些都在$(function(){});

m = function(){
  $("#id").animate({marginRight : 0}, 'slow', function(){
       $("#id").animate({marginRight : "15px"}, 'slow');
     })
} 
 setInterval(m, 700)      
m = function(){
  $("#id").animate({marginRight : 0}, 'slow', function(){
       $("#id").animate({marginRight : "15px"}, 'slow',m);
     });
} 
m();

似乎基于您正在执行的操作,您希望随时间切换元素的运动。 您可以仅将原始函数m()为在完成第二个内部动画时要执行的回调。

(function m(){
    $("#id").animate({marginRight : 0}, 'slow', function(){
        $(this).animate({marginRight : "15px"}, 'slow',function(){
            setTimeout(m,700);
        });
     });
})();

编辑:

它使用setTimeout,但是setTimeout是比setInterval更好的解决方案,因为它只有在前一个完成后才排队一个新的。 这将有助于防止jquery 1.6当前使用的RAF出现问题。

您可以凑合使用this第一动画回调,而不是内再次发现它的。 除此之外,我认为这里没有任何进一步的改进。

m = function(){
  $("#id").animate({marginRight : 0}, 'slow', function(){
       $(this).animate({marginRight : "15px"}, 'slow');
     })
} 
 setInterval(m, 700); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM