教你HTML5與iOS交互實現各種排序動畫演示

前言

在前兩篇給大家介紹各種折線的繪制以及各種時間軸的不同設計,今天繼續給大家分享一篇各種排序的動態實現.好了現在就給大家看看整體的畫面效果.

1)二分法排序進行中顯示的效果
這里寫圖片描述

2)冒泡法排序完成顯示效果

這里寫圖片描述

3)插入法排序進行中顯示的效果

這里寫圖片描述

看完了這三種不同排序的動態演示后,大家一定非常關心,這些動畫是如何實現的,現在我就來給大家著重介紹一下它的實現.這里我們用到了js與iOS的交互,類似于這種動畫,我們用oc語言來實現就顯得比較困難,用JS來實現它就非常容易.現在我們就給大家介紹介紹這種技術.#實現##1)首先我們來導入一個JS的一個框架jquery.min.js,同時新建一個HTML文件.


這里寫圖片描述

2)然后我們來看看HTML文件里面是具體如何實現的.

1.給HTML 文檔定義樣式

<style>*{ margin:0; padding:0px;}body{ background-color:#555;}#box{ width:375px; height:540px; background-color:#000; margin:0 auto; position:relative; overflow:hidden;}#select{ width:375px; height:480px; line-height:00px; text-align:center; margin:00px auto; font-size:18px; color:#fff;}.test{ border:0px solid #CCC; background-color:#fff; position:absolute;bottom:0;}.pass{ background-color:#F00;}.change{ background-color:#0F3;}.changeEnd{ background-color:#FF0;}</style>

2.用select 創建單選或多選菜單。

<div id="box"></div> <div id="select"> 算法:<select id="algorithm"> <option value="1" selected="selected">冒泡算法</option> <option value="2">二分法算法</option> <option value="3">插入算法</option> </select> 元素個數:<select id="num"> <option value="50" selected="selected" >50</option> <option value="40" >40</option> <option value="30" >30</option> <option value="20" >20</option> </select> 執行速度:<select id="speed"> <option value="1" selected="selected" >fast</option> <option value="5" >normal</option> <option value="10" >slow</option> </select> 附加動畫:<input type="checkbox" id="isAnimat" /> <input type="button" value="開始" /> </div>

3.排序算法 js動畫演示運算過程.

4.選擇要執行的動畫

function selectAnimate(arr, selects) { if (selects == 1) { bubbleSort(arr); } if (selects == 2) { cocktailSort(arr); } if (selects == 3) { insertSort(arr); }}```
###5.生成count個 范圍在maxs-mins之間不重復的隨機數
```function getRandom(mins, maxs, count) { if (maxs - mins < count - 1) { return false; } var _this = { limit:{ maxs:maxs, mins:mins, count:count }, rondomArr:[] }; _this.randomFunc = function() { return parseInt(Math.random() * (_this.limit.maxs - _this.limit.mins + 1) + _this.limit.mins); }; _this.in_array = function(val) { for (var i = 0; i < _this.rondomArr.length && _this.rondomArr[i] != val; i++) ; return !(i == _this.rondomArr.length); }; _this.getRandomArr = function() { for (var i = 0; i < _this.limit.count; i++) { var val = _this.randomFunc(); if (_this.in_array(val)) { i--; } else { _this.rondomArr.push(val); } } return _this.rondomArr; }; return _this.getRandomArr();}

6.冒泡算法動畫;

function bubbleSort(arr) { var i = arr.length, j; var tempExchangVal; var timeDo = function() { var time1 = window.setTimeout(function() { if (i > 0) { j = 0; var time2 = window.setInterval(function() { if (j < i - 1) { changeBox(j, "pass"); if (arr[j] > arr[j + 1]) { tempExchangVal = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tempExchangVal; //演示用容器; changeBox(j, "changeEnd", arr[j]); changeBox(j + 1, "change", tempExchangVal); } j++; } else { window.clearInterval(time2); removeBoxColor(); i--; timeDo(); } }, $speed); } else { //結束; doEnd(arr); } }, $speed); }; timeDo();}

7.二分法算法動畫

function cocktailSort(arr) { var i = 0, j; var timedo = function() { var time = window.setTimeout(function() { if (i < arr.length / 2) { j = i; var time2 = window.setInterval(function() { if (j >= arr.length - i - 1) { window.clearInterval(time2); var k = arr.length - i; var time3 = window.setInterval(function() { if (k <= i) { removeBoxColor(); window.clearInterval(time3); timedo(); } changeBox(k, "pass"); if (arr[k] > arr[k + 1]) { var temp = arr[k]; arr[k] = arr[k + 1]; arr[k + 1] = temp; changeBox(k, "changeEnd", arr[k]); changeBox(k + 1, "change", temp); } k--; }, $speed); } changeBox(j, "pass"); if (arr[j] < arr[j - 1]) { var temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; changeBox(j - 1, "changeEnd", temp); changeBox(j, "change", arr[j]); } j++; }, $speed); } else { doEnd(arr); } i++; }, $speed); }; timedo();}

8.插入算法

//插入算法function insertSort(arr) {//插入算法; var i = 1; var timedo = function() { var time = window.setTimeout(function() { if (i < arr.length) { var tmp = arr[i]; var key = i - 1; removeBoxColor(); var time2 = window.setInterval(function(){ changeBox(i, "pass"); if(key >= 0 && tmp < arr[key]){ arr[key + 1] = arr[key]; changeBox(key + 1, "change", arr[key]); key--; }else{ if (key + 1 != i) { arr[key + 1] = tmp; changeBox(key + 1, "changeEnd", tmp); } window.clearInterval(time2); timedo();  } },$speed); }else{ doEnd(arr); } i++; }, $speed); } timedo(); }

9.改變容器顏色及其高度;

//改變容器顏色及其高度;
function changeBox(index, className, height) { if (arguments[2]) { if($isAnimat){ var $thisSpeed = 10*$speed; $(".test").eq(index).animate({height:height},$thisSpeed).addClass(className); }else{ $(".test").eq(index).height(height).addClass(className);  } } else { $(".test").eq(index).removeClass("change changeEnd").addClass(className); }}

10.清除容器顏色和結束動畫

//清除容器顏色function removeBoxColor() { $(".test").removeClass("pass change changeEnd");}//結束動畫function doEnd(arr) { removeBoxColor(); var i = 0; var time = window.setInterval(function() { if (i >= arr.length) { window.clearInterval(time); $("#select").slideDown(); } $(".test").eq(i).addClass("change").next().addClass("pass"); i++; }, 5);}```
好了,這樣就差不多寫完了,現在我們來具體測試一下HTML與iOS具體交互.
##3)HTML與iOS交互.
###1.首先我們導入一個庫
![這里寫圖片描述](http://upload-images.jianshu.io/upload_images/1912602-ecf908226b12359e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###2.在控制器里面去實現
```#import "ViewController.h"http://導入相關頭文件#import <JavaScriptCore/JavaScriptCore.h>//遵守協議@interface ViewController ()<UIWebViewDelegate>//storyboard中我們拖一個UIWebView,并且把其拖成一個屬性@property (weak, nonatomic) IBOutlet UIWebView *webView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; _webView.delegate = self;//設置代理 [self.view addSubview:_webView];//加載webviews //WebView和JS交互 NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"];//查找html文件 NSURLRequest *request = [NSURLRequest requestWithURL:url]; [_webView loadRequest:request];//加載請求}```
這樣整個過程就弄完了,運行我們看一下效果.
##4)效果
![這里寫圖片描述](http://upload-images.jianshu.io/upload_images/1912602-425363a198c3be52?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![這里寫圖片描述](http://upload-images.jianshu.io/upload_images/1912602-ea29e8a10eb00d4c?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![這里寫圖片描述](http://upload-images.jianshu.io/upload_images/1912602-d677d31d04558814?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
剩下的還有很多效果,大家有興趣的可以自己把源碼下來自己去測試.#結論源碼下載:http://download.csdn.net/detail/baihuaxiu123/9504875
文章地址:http://blog.csdn.net/baihuaxiu123/article/details/51265501
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,765評論 0 33
  • 1. tab列表折疊效果 html: 能源系統事業部 崗位名稱: 工作地點 崗位名...
    lilyping閱讀 1,886評論 0 1
  • 秋風送來了秋雨,他們一起翩翩起舞告訴我們,秋天來了,你準備好收獲了嗎? 收獲需要付出努力,努力讀書,繼續加油! 顧...
    清風2005閱讀 403評論 6 2
  • 或許她的情感是不理智的,但卻是發自內心的 或許她的生命是那么短暫,但記憶永存人心間 淚點很平常,又真情流露?;叵肫?..
    和光知守閱讀 310評論 10 3
  • 我討厭蚊子,因為他們的聲音太吵,我不打蚊子,所以蚊子在我這完全可以子孫滿堂了 有一只老蚊子和小蚊子傳授經驗: 跟你...
    我不是注銷了嗎閱讀 297評論 2 0