javascript - js for循环中如何延迟执行?
天蓬老师
天蓬老师 2017-04-11 12:29:34
0
2
475

想用js实现冒泡排序的可视化,但是for循环中的语句块没法延迟执行,导致没法做成动画效果。

代码如下所示:

for (var i = 0; i < childNodes.length; i++) { for (var j = 0; j < childNodes.length - i -1; j++) { if (childNodes[j].firstChild.nodeValue > childNodes[j+1].firstChild.nodeValue) { temp = childNodes[j+1]; parentNode.replaceChild(childNodes[j],childNodes[j+1]); parentNode.insertBefore(temp,childNodes[j]); } } }

有尝试用下面的方法设置延迟执行,但是这样的话,外层的for循环没有执行,导致内存for循环执行一次后就结束了...

for (var i = 0; i < childNodes.length; i++) { for (var j = 0; j < childNodes.length - i -1; j++) { (function(j){ setTimeout(function(){ if (childNodes[j].firstChild.nodeValue > childNodes[j+1].firstChild.nodeValue) { temp = childNodes[j+1]; parentNode.replaceChild(childNodes[j],childNodes[j+1]); parentNode.insertBefore(temp,childNodes[j]); } },j*1000); })(j); } } }

不知道有什么方法可以实现吗

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信 (2)
黄舟

你使用j来延迟不对,因为j是存在重复的情况的;
你可以定义多一个自增的变量x
var x=0;

for (var i = 0; i < childNodes.length; i++) { for (var j = 0; j < childNodes.length - i -1; j++) { (function(j){ setTimeout(function(){ if (childNodes[j].firstChild.nodeValue > childNodes[j+1].firstChild.nodeValue) { temp = childNodes[j+1]; parentNode.replaceChild(childNodes[j],childNodes[j+1]); parentNode.insertBefore(temp,childNodes[j]); } },x*1000); })(j); x++ } }
いいねを押す+0
    Ty80

    冒泡排序不用延时貌似也可以实现吧!

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!