关于 JS 控制代码暂停的工作总结,需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
方法一:这是在网上找的一个方法,可以用。但说实话,这个方法我不怎么明白。。。写得好复杂。这样做跟 setTimeout 能有多大区别?
- function Pause(obj, iMinSecond) {
- if (window.eventList == null ) window.eventList = new Array();
- var ind = -1;
- for (var i = 0; i < window.eventList.length; i++) {
- if (window.eventList[i] == null ) {
- window.eventList[i] = obj;
- ind = i;
- break;
- }
- }
- if (ind == -1) {
- ind = window.eventList.length;
- window.eventList[ind] = obj;
- }
- setTimeout( "GoOn(" + ind + ")" , iMinSecond);
- }
- function GoOn(ind) {
- var obj = window.eventList[ind];
- window.eventList[ind] = null;
- if (obj.NextStep) obj.NextStep();
- else obj();
- }
- function testJsStop() {
- alert( "1");
- Pause( this, 3000);
- this.NextStep = function () {
- alert( "2");
- }
- }
方法二:这也是在网上找的,可以用。它的原理是先弹出一个窗口,因为 JS 在弹出窗口时,代码会在当前位置暂停执行。等过了一段时间后再执行关闭窗口函数,代码继续执行。这中方法非常简单,但令人讨厌的是它会弹出一个窗口。。。
- function pause(numberMillis) {
- addcloud();
- var dialogScript = 'window.setTimeout(' + ' function () { $("#bgDiv").remove(); }, ' + numberMillis + ');';
- var result = window.showModalDialog('javascript:document.writeln(' + '"<script>' + dialogScript + '<' + '/script>")' );
- }
- function test() {
- var a = 0;
- alert(a);
- pause(5000);
- a = 999;
- alert(a);
- }
方法三:这个方法是我自己写的。因为我要实现的功能比较复杂,要循环调用 getpath() 方法。而前面的两种方法都只能应用在顺序执行的代码段中,无法控制循环。在这里我采用了前后台结合的方法。在前台通过 Ajax 调用后台方法,直接将线程挂起 1s,成而实现 JS 代码强制暂停。
前台 JS:
- function getpath() {
- var time = 1000;
- $.ajaxSettings.async = false;
- $.getJSON( "../Actions/TspHandler.ashx?rKey=" + parseInt(Math.random() * 999 + 1).toString() + "&opKey=Sleep"
- + "&Time=" + time,
- null,
- function (json) {
- });
- ..........
- }
后台 ashx:
- if (methodname == "Sleep" )//休眠
- {
- int time = int .Parse(req["Time"].ToString());
- System.Threading. Thread.Sleep(time);
- }
以上仅供大家参考,欢迎吐槽!
来源: