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需再刷新一下页面才能执行]

相关文章

  • javascript模仿百万格子小的一小段代码

    javascript模仿百万格子小的一小段代码

    javascript模仿百万格子小的一小段代码...
    2007-08-08
  • JavaScript生成简单等差数列

    JavaScript生成简单等差数列

    本文给大家分享使用for循环实现js生成简单的等差数列,具体实现方法,大家参考下本文
    2017-11-11
  • 解决超出JS的安全整数的限制范围问题

    解决超出JS的安全整数的限制范围问题

    这篇文章主要介绍了解决超出JS的安全整数的限制范围问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • DPlayer.js视频播放插件使用方法

    DPlayer.js视频播放插件使用方法

    这篇文章主要为大家详细介绍了JSx实现简单控制视频播放倍速,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • javascript动态分页的实现方法实例

    javascript动态分页的实现方法实例

    最近的项目需要添加一个分页导航的功能,没有用网上封装好的文件,通过JS自己简单实现了效果,这篇文章主要给大家介绍了关于javascript动态分页的实现方法,需要的朋友可以参考下
    2022-06-06
  • js三种排序算法分享

    js三种排序算法分享

    近来无聊,翻出来大学时候的数据结构教材来看。突然想起,大学时候就想过用js实现基本的排序算法的事情,反正闲来无事,便写出来后记录于此
    2012-08-08
  • Javascript实现仿QQ随机数验证

    Javascript实现仿QQ随机数验证

    这篇文章主要为大家详细介绍了Javascript实现仿QQ随机数验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • JS实现带有3D立体感的银灰色竖排折叠菜单代码

    JS实现带有3D立体感的银灰色竖排折叠菜单代码

    这篇文章主要介绍了JS实现带有3D立体感的银灰色竖排折叠菜单代码,可实现基本的JS响应鼠标事件动态展开与折叠菜单栏的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • 微信jssdk在iframe页面失效问题的解决措施

    微信jssdk在iframe页面失效问题的解决措施

    这篇文章主要介绍了微信jssdk在iframe页面失效问题的解决措施 的相关资料,需要的朋友可以参考下
    2016-03-03
  • 微信小程序实现简单购物车小功能

    微信小程序实现简单购物车小功能

    这篇文章主要为大家详细介绍了微信小程序实现简单购物车小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论