JavaScript-jQuery有没有类似sleep方法?
jQuery中有each, map用来遍历数组或对象的方法, 当我们在使用两个方法遍历某个数组对象时,如果想控制一下每次循环的间隔时间,有没有类似于sleep那样的方法。 因为在使用循环做js效果时,有些效果可能会因为遍历速度过快而挂掉。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
使用js 的 setTimeout()
1、jquery的$.delay()方法
2、js写的sleep方法(不过会消耗cpu资源)
function sleep(n) {
var start = new Date().getTime();
while(true) if(new Date().getTime()-start > n) break;
}
3、function sleep(milliSeconds){
$.ajax({
type:'get',
url:'http://www.example.com/?t='+milliSeconds,
success:function(){
//
}
});
return true;
}
详见javascript sleep
之前有过类似的需求,所以写了一个,还算好用,供参考。
(function($)
{
var _sleeptimer;
$.sleep = function( time2sleep, callback )
{
$.sleep._sleeptimer = time2sleep;
$.sleep._cback = callback;
$.sleep.timer = setInterval('$.sleep.count()', 1000);
}
$.extend ($.sleep, {
current_i : 1,
_sleeptimer : 0,
_cback : null,
timer : null,
count : function()
{
if ( $.sleep.current_i === $.sleep._sleeptimer )
{
clearInterval($.sleep.timer);
$.sleep._cback.call(this);
}
$.sleep.current_i++;
}
});
})(jQuery);
一般做延迟都是用setTimeout或者setInterval,不过有一点要注意,阻塞会让脚本处于同步循环中,导致页面变慢,而且js有15s限制,如果超出15s了会有运行缓慢的提示框出来。
可以使用 Jscex 中的 await 参考 http://www.cnblogs.com/JeffreyZhao/archive/2011/05/16/jscex-write-sexy-javascript-slide.html
如楼上所说,使用setTimeout,经提醒直接使用是不行的,比如下面的一段代码:
$("img").each(function(){
setTimeout(function() {
dosomthing....
}
}, 1000);
});
是错误的,不能实现效果
使用楼下所说的.delay() 好像也没有什么效果
没办法,只好先用时间写了一个低效的sleep:
function sleep(n)
{
var start=new Date().getTime();
while(true) if(new Date().getTime()-start> n) break;
}
这种方法一个是太费cup了,而且好像也不起作用
后来想明白了,其实setTimeout是可以的,只是设置的间隔时间不能一样
<p><button>Run</button></p>
<span id="aaa"></span>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<script>
$("button").click(function() {
$("div").each(function(index, domEle) {
setTimeout(function(){$("#aaa").html(index);},index*1000);
});
});
</script>
以上能实现效果
不要用each遍历就可以了
setInterval
cronRun.sleep = function(n) {
for (var i=0,j=n*1000;i<j;i++){
}
}
小飞写的
function sleep(n) {
var start = new Date().getTime();
while(true) if(new Date().getTime()-start > n) break;
}
貌似 Date new 的过多啊
不过我在我本本上测的 好像不怎么管用,不知道为什么 是不是和多核处理器有关?? 不清楚
只能用如下代码搞了
// 第一次初始化时花费时间应该长一些,用于后端初始化一些资源
if (cronNoInit){
cronRun._exec();
// 暂停 2 秒,使用遮罩效果来隔除时间
$('#div_mask').css({
position:"absolute",width:$(document).width(), height:$(document).height(),
top:"0",left:"0",opacity:0.8,background:"#000",
display:"none"
}).show(1,function(){
$('#div_mask').hide(4000,function(){
// 完成初始化
cronNoInit = false;
for(var i=cronProgressCounter;i<5;i++){
cronRun._exec();
}
});
});
}
坑爹啊 只能使用 setTimeout 这种东西 擦
window对象有两个主要的定时方法,分别是setTimeout 和 setInteval 他们的语法基本上相同,但是完成的功能取有区别。
setTimeout方法是定时程序,也就是在什么时间以后干什么。干完了就拉倒。
setInterval方法则是表示间隔一定时间反复执行某操作。
如何做就看自己使用哪个函数了
JS是单线程的,所谓的sleep是阻塞当前线程继续执行,所以想实现真正的sleep,就一定使整个JS停止执行,所以考虑用setTimeout来做你想用sleep做的事,虽然异步使得你的逻辑看起来不连续,然而没有更好的办法
setTimeout("xxx()",1000);
1秒后执行xxx()函数;