教你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"//导入相关头文件#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阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,719评论 0 33
  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 1,824评论 0 1
  • 秋风送来了秋雨,他们一起翩翩起舞告诉我们,秋天来了,你准备好收获了吗? 收获需要付出努力,努力读书,继续加油! 顾...
    清风2005阅读 380评论 6 2
  • 或许她的情感是不理智的,但却是发自内心的 或许她的生命是那么短暂,但记忆永存人心间 泪点很平常,又真情流露。回想起...
    和光知守阅读 293评论 10 3
  • 我讨厌蚊子,因为他们的声音太吵,我不打蚊子,所以蚊子在我这完全可以子孙满堂了 有一只老蚊子和小蚊子传授经验: 跟你...
    我不是注销了吗阅读 281评论 2 0