如何实现Javascript延迟执行后续代码?
具体问题是这样的。比如我有一段JS代码:......target();......我希望在target函数执行之前,等待countdown毫秒。换句话说,在执行targe...
具体问题是这样的。
比如我有一段JS代码:
......
target();
......
我希望在target函数执行之前,等待countdown毫秒。
换句话说,在执行target函数之前,中断countdown毫秒,期间不做任何事情。等countdown毫秒的时间过去之后,继续执行target函数。
注意此处countdown是一个变量,也就是说我并不知道具体要延迟多少时间,这个延迟的具体时间是在JS执行过程中才被确认的。
谢! 展开
比如我有一段JS代码:
......
target();
......
我希望在target函数执行之前,等待countdown毫秒。
换句话说,在执行target函数之前,中断countdown毫秒,期间不做任何事情。等countdown毫秒的时间过去之后,继续执行target函数。
注意此处countdown是一个变量,也就是说我并不知道具体要延迟多少时间,这个延迟的具体时间是在JS执行过程中才被确认的。
谢! 展开
5个回答
展开全部
噗。。
1. 我是提问者,很感谢大家的帮助。
2. 今天想了想,已经解决了这个问题了,等会儿会放上来解决方法。
3. 感谢@草薙在 你的建议我会考虑,不过JS的运行机制我有学过的,你说的我也知道。正因为如此,所以没有“显而易见的”解决方法,所以才要动脑筋思考不是~
4. 感谢@hyjiacan 虽然你没有解决我的问题。target()只不过是一个代号,意味着后面还有很多代码,并不是一个具体的函数呢。
5. 感谢@三间北房 你的方法我知道的,这样确实可以实现“暂停”。不过如果后续代码有很多很多行,这样处理就不合适了~
6. 感谢@ghp120 你的方法是另一个思路,回头可以试一试,或者你可以放上来你测试通过的代码~
以下是我的解决方案:
思路:
setInterval和setTimeout不同之处,一方面在于setInterval将会不断地重复执行代码而setTimeout只是执行一次,另一方面在于JS并不会再setTimeout处暂停而等待setTimeout中的代码执行,却会在setInterval处暂停,不断重复执行其中的代码。
此外,setInterval的一个特性是第一次执行的时候,也会等待一个时间,而不是立即执行。
所以我们要做的就是使用setInterval,并且让它只执行一个循环。
代码:
……
var CD;
function sleep(){clearInterval(CD);}
CD = setInterval("sleep()", countdown);
target()
……
=============================================
以上~
1. 我是提问者,很感谢大家的帮助。
2. 今天想了想,已经解决了这个问题了,等会儿会放上来解决方法。
3. 感谢@草薙在 你的建议我会考虑,不过JS的运行机制我有学过的,你说的我也知道。正因为如此,所以没有“显而易见的”解决方法,所以才要动脑筋思考不是~
4. 感谢@hyjiacan 虽然你没有解决我的问题。target()只不过是一个代号,意味着后面还有很多代码,并不是一个具体的函数呢。
5. 感谢@三间北房 你的方法我知道的,这样确实可以实现“暂停”。不过如果后续代码有很多很多行,这样处理就不合适了~
6. 感谢@ghp120 你的方法是另一个思路,回头可以试一试,或者你可以放上来你测试通过的代码~
以下是我的解决方案:
思路:
setInterval和setTimeout不同之处,一方面在于setInterval将会不断地重复执行代码而setTimeout只是执行一次,另一方面在于JS并不会再setTimeout处暂停而等待setTimeout中的代码执行,却会在setInterval处暂停,不断重复执行其中的代码。
此外,setInterval的一个特性是第一次执行的时候,也会等待一个时间,而不是立即执行。
所以我们要做的就是使用setInterval,并且让它只执行一个循环。
代码:
……
var CD;
function sleep(){clearInterval(CD);}
CD = setInterval("sleep()", countdown);
target()
……
=============================================
以上~
展开全部
用setTimeout是有些局限性,是一个并发执行。
最完备的方法应该是触发机制,判断上一个方法结束后执行target,或者执行setTimeout(target, countdown),而且后续的方法由target中判断执行完毕后执行,就基本实现了你的要求。
最完备的方法应该是触发机制,判断上一个方法结束后执行target,或者执行setTimeout(target, countdown),而且后续的方法由target中判断执行完毕后执行,就基本实现了你的要求。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你当js可以sleep吗?
想实现这个功能必须自己设计好脚本的执行,js不会停下来的,除非执行完了,或者有alert什么的。好好设计一下结构,应该可以满足你的要求
比如:
setTimeout(next, countdown);
function next(){
target();
......
其他内容的脚本
......
}
想实现这个功能必须自己设计好脚本的执行,js不会停下来的,除非执行完了,或者有alert什么的。好好设计一下结构,应该可以满足你的要求
比如:
setTimeout(next, countdown);
function next(){
target();
......
其他内容的脚本
......
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
必须要用setTimeout,setTimeout里执行target然后再用setTimeout放后续代码
追问
并不行。
设置了setTimeout,并不会在此处暂停,等待countdown倒计时结束再执行target。而是从此时开始,计时countdown,同时执行后续代码。等到countdown到时的时候,执行target。这与要求不符。
另外,事实上如果没有target这个函数,这个方法就失效了。
我需要的是在此处暂停,什么也不做,然后在执行target(或者其他的代码)。
追答
抱歉,javascript不提供操作线程阻止举行的行为,或者你可以用while(true){}阻塞等待,但是会使浏览器停止响应。
建议你去学一下javascript的运行机制。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
setTimeout(target, countdown);
一般来说,这样是可以的
一般来说,这样是可以的
追问
并不行。
设置了setTimeout,并不会在此处暂停,等待countdown倒计时结束再执行target。而是从此时开始,计时countdown,同时执行后续代码。等到countdown到时的时候,执行target。这与要求不符。
追答
后续代码由target触发。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询