js 排序动画模拟 冒泡排序

 更新时间:2012年07月16日 00:27:54   作者:  
在js中,想让线程sleep一下确实不是一件简单的事情,过多的使用定时器或者回调函数,会让复杂,凌乱,这时,可以考虑能否使用队列来做一些简
而在某些场景中,队列确实像一支奇兵,可以带来不错的效果,比如配合定时器使用,可以模拟时间差效果
复制代码 代码如下:

function createDq(){
var dq = [], size = 0;
return {
setDq:function(queue){
dq = queue;
size = queue.length;
},
queue:function(fn){
size ++;
dq.push(fn);
},
dqueue:function(){
size --;
return dq.shift();
},
run:function(fn){
var me = this, timer;
timer = setInterval(function(){
if(size <= 1){
clearInterval(timer);
}
fn.call(null,me.dqueue());
},30);
}
}
}

以上是一个简单的实现,在不同的场景,可以做一些适当的变通,以做到因地制宜。
下面是一个模拟冒泡排序的动画,尝试着使用了一点点观察者模式,似乎还不错
复制代码 代码如下:

function bubble(){
var obs = [];
function compare(x, y) {
return x.w - y.w;
}
function swap(a, i, j) {
var t = a[i]; a[i] = a[j]; a[j] = t;
}
function proxy(a, i, j){
notify(a[i].id + "-" + a[j].id);
swap.apply(null,arguments);
}
function notify(arg){
obs[0].m.call(obs[0],arg);
}
return {
addOb:function(ob){
obs.push(ob);
},
sort:function(arr){
var len = arr.length;
for (var x = 1; x < len; x++) {
for (var y = 0; y < len - x; y++) {
if (compare(arr[y], arr[y + 1]) > 0) {
proxy(arr, y, y + 1);
}
}
}
}
}
}


[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

相关文章

  • 微信小程序使用onreachBottom实现页面触底加载及分页效果

    微信小程序使用onreachBottom实现页面触底加载及分页效果

    小程序还没有使用pc端的那种分页格式,下面这篇文章主要给大家介绍了关于微信小程序使用onreachBottom实现页面触底加载及分页效果的相关资料,需要的朋友可以参考下
    2022-10-10
  • JavaScript获取路径设计源码

    JavaScript获取路径设计源码

    JavaScript获取路径的方法有很多,网上也可以搜索的到,下面本例也要为大家讲解下,有源码及结果截图
    2014-05-05
  • javaScript如何生成xmlhttp

    javaScript如何生成xmlhttp

    生成xmlhttp的方法有很多,在本文为大家介绍下javaScript中是如何实现的
    2013-12-12
  • javascript trie前缀树的示例

    javascript trie前缀树的示例

    这篇文章主要介绍了javascript trie单词查找树的示例,详细的介绍了trie的概念和实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • JS中将图片base64转file文件的两种方式

    JS中将图片base64转file文件的两种方式

    这篇文章主要介绍了JS中图片base64转file文件的两种方式,实现把图片的base64编码转成file文件的功能,然后再上传至服务器,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • JavaScript编写的网页小游戏,很给力

    JavaScript编写的网页小游戏,很给力

    这篇文章主要介绍了JavaScript编写的网页小游戏,附上全部代码供大家查看,实现了网页的小游戏页面,需要的朋友可以参考下
    2017-08-08
  • Json字符串转换为JS对象的高效方法实例

    Json字符串转换为JS对象的高效方法实例

    一般JSON字符串转换为JS对象,都使用var jsonStr="{a:1}";var jsonObj = eval("("+jsonStr+")");
    2013-05-05
  • Layer组件多个iframe弹出层打开与关闭及参数传递的方法

    Layer组件多个iframe弹出层打开与关闭及参数传递的方法

    今天小编就为大家分享一篇Layer组件多个iframe弹出层打开与关闭及参数传递的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • js+canvas实现代码雨效果

    js+canvas实现代码雨效果

    这篇文章主要为大家详细介绍了js+canvas代码雨效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • JS实现点击上移下移LI行数据的方法

    JS实现点击上移下移LI行数据的方法

    这篇文章主要介绍了JS实现点击上移下移LI行数据的方法,涉及javascript针对LI列表动态排序的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08

最新评论