【動畫】JQuery實現(xiàn)冒泡排序算法動畫演示

1 前言

冒泡排序是大家最熟悉的算法汹胃,也是最簡單的排序算法勋陪,因其排序過程很象氣泡逐漸向上漂浮而得名揩瞪。為了更好的理解其基本的思想疹鳄,毛三胖利用JQuery實現(xiàn)了冒泡排序的動畫演示,并計劃陸續(xù)實現(xiàn)其它排序算法的動畫演示∨÷裕現(xiàn)將冒泡排序JQuery實現(xiàn)的基本思路和代碼分享如下:

2 動畫演示

2.1 演示地址

冒泡排序動畫演示

2.2 30秒GIF

演示動畫前30秒gif圖,圖片大小1.60M瘪弓。

30秒動畫

3 動畫設(shè)計及實現(xiàn)

因為JavaScript中并不存在類似sleep()這樣的函數(shù)垫蛆,所以只能利用setInterval()來實現(xiàn)動畫效果。因此不能利用算法的雙重循環(huán)實現(xiàn)方式,只能算法過程擬合到一個時間軸上來實現(xiàn)動畫效果袱饭。

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代碼

每隔一秒執(zhí)行一次協(xié)作川无,完成排序后清除interval

function go() {
    //設(shè)置當(dāng)前相比較兩元素樣式
    setCss();
    interval = setInterval(function () {
        //times趟數(shù)虑乖,達(dá)到數(shù)組長度-1懦趋,結(jié)束循環(huán)
        if(times < count -1) {
            //交換函數(shù),如必要實現(xiàn)兩元素交換
            var change = exchange();
            //如不交換疹味,指針向前
            if (!change) {
                current++;
                next++;
                //內(nèi)部循環(huán)次數(shù)逐漸減少
                if (current == count - 1 - times) {
                    times++;
                    current = 0;
                    next = 1;
                    //保留每一趟的歷史數(shù)據(jù)
                    drawData();
                }
                setCss();
            }
        } else {
            //排序完成仅叫,清理
            $lis.removeClass("active");
            clearInterval(interval);
        }
    },1000);
}

3.3 交換動效

交換的動態(tài)效果利用了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 結(jié)語

目前诫咱,只完成了冒泡排序和直接插入排序兩個算法的動畫演示,其它的慢慢來完成吧洪灯。要學(xué)習(xí)完整的源代碼可直接源文獲取坎缭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市婴渡,隨后出現(xiàn)的幾起案子幻锁,更是在濱河造成了極大的恐慌,老刑警劉巖边臼,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異假消,居然都是意外死亡柠并,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門富拗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臼予,“玉大人,你說我怎么就攤上這事啃沪≌呈埃” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵创千,是天一觀的道長缰雇。 經(jīng)常有香客問我,道長追驴,這世上最難降的妖魔是什么械哟? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮殿雪,結(jié)果婚禮上暇咆,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好爸业,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布其骄。 她就那樣靜靜地躺著,像睡著了一般扯旷。 火紅的嫁衣襯著肌膚如雪年栓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天薄霜,我揣著相機與錄音某抓,去河邊找鬼。 笑死惰瓜,一個胖子當(dāng)著我的面吹牛否副,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崎坊,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼备禀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奈揍?” 一聲冷哼從身側(cè)響起曲尸,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎男翰,沒想到半個月后另患,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蛾绎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年昆箕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片租冠。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹏倘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顽爹,到底是詐尸還是另有隱情纤泵,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布镜粤,位于F島的核電站捏题,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏繁仁。R本人自食惡果不足惜涉馅,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黄虱。 院中可真熱鬧稚矿,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昧识,卻和暖如春钠四,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跪楞。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工缀去, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甸祭。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓缕碎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親池户。 傳聞我的和親對象是個殘疾皇子咏雌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,129評論 25 707
  • 所謂“方法論”,是指以解決問題為目的的一種思考方式或可執(zhí)行性強的策略校焦。把握住事物的根本規(guī)則赊抖,可以復(fù)用,切實有效寨典。 ...
    小和閱讀 659評論 0 4
  • 1.labyrinthine The streets of the Old City are narrow and...
    Mr_Oldman閱讀 117評論 0 0
  • ——說書人的一場戲 原本只剩下淺薄的敘事氛雪,來鋪墊起這份儀式感般出戲的生命,前些天聽到的歌凝赛,歌詞都是那樣的陌生注暗,唯一...
    天空l閱讀 645評論 0 51
  • 各行各業(yè)都缺少不了銷售崗位,之前各行各業(yè)的銷售工作經(jīng)歷中墓猎,“銷售冠軍”沒那么亮眼。那僅僅是個人維度的成功赚楚,是以個人...
    Candice歡閱讀 195評論 0 0