1 前言

冒泡排序是大家最熟悉的算法,也是最简单的排序算法,因其排序过程很象气泡逐渐向上漂浮而得名。为了更好的理解其基本的思想,毛三胖利用JQuery实现了冒泡排序的动画演示,并计划陆续实现其它排序算法的动画演示。现将冒泡排序JQuery实现的基本思路和代码分享如下:

2 动画演示

2.1 演示地址

冒泡排序动画演示

2.2 30秒GIF

演示动画前30秒gif图,图片大小1.60M。

3 动画设计及实现

因为JavaScript中并不存在类似sleep()这样的函数,所以只能利用setInterval()来实现动画效果。因此不能利用算法的双重循环实现方式,只能算法过程拟合到一个时间轴上来实现动画效果。

3.1 Html代码

<ul id="myList">
<li>97</li>
<li>72</li>
<li>68</li>
<li>29</li>
<li>51</li>
<li>45</li>
<li>88</li>
<li>32</li>
<li>41</li>
<li>12</li>
</ul>

3.2 核心JS代码

每隔一秒执行一次协作,完成排序后清除interval

function go() {
//设置当前相比较两元素样式
setCss();
interval = setInterval(function () {
//times趟数,达到数组长度-1,结束循环
if(times < count -1) {
//交换函数,如必要实现两元素交换
var change = exchange();
//如不交换,指针向前
if (!change) {
current++;
next++;
//内部循环次数逐渐减少
if (current == count - 1 - times) {
times++;
current = 0;
next = 1;
//保留每一趟的历史数据
drawData();
}
setCss();
}
} else {
//排序完成,清理
$lis.removeClass("active");
clearInterval(interval);
}
},1000);
}

3.3 交换动效

交换的动态效果利用了github的JQuery的swap,地址:Github jquery.swap.js

源代码如下:

(function( $ ) {
$.fn.swap = function(a, b) {
t = this
if(t.length == 1 && a.length == 1 && b == undefined ){
return _swap(t, a);
}else if(t.length > 1 && typeof(a) == "number" && typeof(b) == "number" ){
_swap(t[a], t[b])
return t;
}else{
$.error( 'Argument Error!' );
}
}; function _swap(a, b){
var from = $(a),
dest = $(b),
from_pos = from.offset(),
dest_pos = dest.offset(),
from_clone = from.clone(),
dest_clone = dest.clone(),
total_route_vertical = dest_pos.top + dest.height() - from_pos.top,
route_from_vertical = 0,
route_dest_vertical = 0,
total_route_horizontal = dest_pos.left + dest.width() - from_pos.left,
route_from_horizontal = 0,
route_dest_horizontal = 0 from.css("opacity", 0);
dest.css("opacity", 0); from_clone.insertAfter(from).css({position: "absolute", width: from.outerWidth(), height: from.outerHeight()}).offset(from_pos).css("z-index", "999")
dest_clone.insertAfter(dest).css({position: "absolute", width: dest.outerWidth(), height: dest.outerHeight()}).offset(dest_pos).css("z-index", "999") if(from_pos.top != dest_pos.top)
route_from_vertical = total_route_vertical - from.height()
route_dest_vertical = total_route_vertical - dest.height()
if(from_pos.left != dest_pos.left)
route_from_horizontal = total_route_horizontal - from.width()
route_dest_horizontal = total_route_horizontal - dest.width() from_clone.animate({
top: "+=" + route_from_vertical + "px",
left: "+=" + route_from_horizontal + "px",
},
"slow",
function(){
dest.insertBefore(this).css("opacity", 1);
$(this).remove();
}); dest_clone.animate({
top: "-=" + route_dest_vertical + "px",
left: "-=" + route_dest_horizontal + "px"
},
"slow",
function(){
from.insertBefore(this).css("opacity", 1);
$(this).remove();
}); return from;
}
})( jQuery );

4 结语

目前,只完成了冒泡排序和直接插入排序两个算法的动画演示,其它的慢慢来完成吧。要学习完整的源代码可直接源文获取。

冒泡排序动画

插入排序动画

【动画】JQuery实现冒泡排序算法动画演示的更多相关文章

  1. 9种jQuery和css3图片动画特效代码演示

    1.自由旋转的jQuery图片 演示和下载地址 2.css3阴影动画效果 演示和下载地址 3.拉窗帘特效图片 演示和下载地址 4.css3文字特效动画 演示和下载地址 5.css3时钟代码 演示和下载 ...

  2. DrawSVG - SVG 路径动画 jQuery 插件

    jQuery DrawSVG 使用了 jQuery 内置的动画引擎实现 SVG 路径动画,用到了 stroke-dasharray 和 stroke-dashoffset 属性.DrawSVG 是完全 ...

  3. 一款很实用的jQuery鼠标悬浮有动画效果的响应式瀑布流插件

    一款很实用的jQuery鼠标悬浮有动画效果的响应式瀑布流插件 在线预览 下载地址 实例代码 <!doctype html> <html lang="zh"> ...

  4. aos.js超赞页面滚动元素动画jQuery动画库

    插件描述:aos.js 是一款效果超赞的页面滚动元素动画jQuery动画库插件.该动画库可以在页面滚动时提供28种不同的元素动画效果,以及多种easing效果.在页面往回滚动时,元素会恢复到原来的状态 ...

  5. 8款基于Jquery的WEB前端动画特效

    1.超炫酷的30个jQuery按钮悬停动画 按钮插件是最常见的jQuery插件之一,因为它用途广泛,而且配置起来最为方便.今天我们要分享的是30个超炫酷的jQuery悬停按钮动画,当我们将鼠标滑过按钮 ...

  6. 10款基于jquery的web前端动画特效

    1.jQuery横向手风琴图片切换动画 之前我们为大家分享过很多款基于jQuery和CSS3的手风琴菜单和手风琴焦点图插件,比如CSS3响应式垂直手风琴菜单和jQuery横向手风琴图片展示插件.今天要 ...

  7. 深入学习jQuery的三种常见动画效果

    × 目录 [1]显隐效果 [2]高度变化 [3]淡入淡出 前面的话 动画效果是jQuery吸引人的地方.通过jQuery的动画方法,能够轻松地为网页添加视觉效果,给用户一种全新的体验.jQuery动画 ...

  8. jQuery鼠标悬停内容动画切换效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 第4章 jQuery的事件和动画(二)

    二. jQuery中的动画 动画在前面几章案例中是回避不了的问题.此处结合一些简便的写法稍作系统的分析. 1. show()和hide()(1)介绍——不用过多的介绍了jQuery最基本的方法.本质是 ...

随机推荐

  1. .32-浅析webpack源码之doResolve事件流(4)

    流程图如下: 重回DescriptionFilePlugin 上一节最后进入relative事件流,注入地点如下: // relative plugins.push(new DescriptionFi ...

  2. php的底层原理

    PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...

  3. 7系列高速收发器总结 GTP IP核使用篇

    上一篇7系列收发器博文讲解了GTP IP核的基本配置,本文继续分析如何将它使用起来.生成IP核后打开example design,先看看工程中包含的文件结构. 顶层文件下包含了gtp ip核系统顶层文 ...

  4. 【编程技巧】ExtJs 设置GridPanel表格文本垂直居中

    详细讲解见 http://blog.csdn.net/li396864285/article/details/9310983 以下是我改修的代码: {         width:90,        ...

  5. Thrift之TProtocol系列TBinaryProtocol解析

    首先看一下Thrift的整体架构,如下图: 如图所示,黄色部分是用户实现的业务逻辑,褐色部分是根据thrift定义的服务接口描述文件生成的客户端和服务器端代码框架(前篇2中已分析了thrift ser ...

  6. what is yaml ?

    what is yaml  ? when I fist time meeting it  is in java projects she as a system config file to my e ...

  7. shell 学习四十五天---xargs

    当 find 产生一个文件列表时,该列表提供给另一个命令有时是很有用的.案例: $touch abc.c erd.c oiy.c $ll ./erd.c ./abc.c ./oiy.c $find - ...

  8. mybatis-databaseIdProvider多数据库支持

    <select id="selectPerson" parameterType="int" parameterMap="deprecated&q ...

  9. kafka学习

    kafka名词解释和工作方式: Producer :消息生产者,就是向kafka broker发消息的客户端. Consumer :消息消费者,向kafka broker取消息的客户端 Topic : ...

  10. 国内不谈java

    今天晚上在整理电脑,不知道怎么回事,电脑里面放着一篇文章.打开一看写的挺好的,现在就贴出来,望共勉.   国内不谈java--会有千万人跳出来和你争嘴的.越是如此,我越是不忍心不说出来,越是不不忍心看 ...