JavaScript-jQuery有没有类似sleep方法?

JavaScript-jQuery有没有类似sleep方法?

虐人心 发布于 2017-01-18 字数 221 浏览 1652 回复 11

jQuery中有each, map用来遍历数组或对象的方法, 当我们在使用两个方法遍历某个数组对象时,如果想控制一下每次循环的间隔时间,有没有类似于sleep那样的方法。 因为在使用循环做js效果时,有些效果可能会因为遍历速度过快而挂掉。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

夜无邪 2017-09-06 11 楼

使用js 的 setTimeout()

瑾兮 2017-09-02 10 楼

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

泛泛之交 2017-07-30 9 楼

之前有过类似的需求,所以写了一个,还算好用,供参考。

(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);

虐人心 2017-06-11 8 楼

一般做延迟都是用setTimeout或者setInterval,不过有一点要注意,阻塞会让脚本处于同步循环中,导致页面变慢,而且js有15s限制,如果超出15s了会有运行缓慢的提示框出来。

偏爱自由 2017-06-09 6 楼

如楼上所说,使用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>

以上能实现效果

想挽留 2017-03-30 5 楼

不要用each遍历就可以了
setInterval

虐人心 2017-03-27 4 楼

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 这种东西 擦

甜柠檬 2017-02-27 3 楼

window对象有两个主要的定时方法,分别是setTimeout 和 setInteval 他们的语法基本上相同,但是完成的功能取有区别。

  setTimeout方法是定时程序,也就是在什么时间以后干什么。干完了就拉倒。

  setInterval方法则是表示间隔一定时间反复执行某操作。

如何做就看自己使用哪个函数了

浮生未歇 2017-02-23 2 楼

JS是单线程的,所谓的sleep是阻塞当前线程继续执行,所以想实现真正的sleep,就一定使整个JS停止执行,所以考虑用setTimeout来做你想用sleep做的事,虽然异步使得你的逻辑看起来不连续,然而没有更好的办法

归属感 2017-01-23 1 楼

setTimeout("xxx()",1000);
1秒后执行xxx()函数;