DEMO网址:
http://jianwangsan.cn/toolbox
(四)制作JSON,自动将图标填充进所有工具
首先是JSON,因为工具很多,所以JSON内容很长。
具体而言,JSON是一个数组中的对象(只有这一个对象),他有两个属性:BigImg和CommonImg。
这两个属性都是数组类型;
BigImg里面,他用于存放最上面的三个大图标;
CommonImg里面,存放其他工具图标。
BigImg单个数组元素的结构如下:
[javascript] view plain copy
- <span style="font-family:SimSun;">{
- "title": "微信清理",
- "description": "定期清理微信,节省手机空间",
- "bigImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "0px"
- }
- },
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "0px"
- }
- }
- },</span>
前两个属性看值就知道了;
bingImg和commonImg属性中的ImgPosition中的两个属性,主要是描述这个图标在图片中的位置;
CommonImg结构类似:
[javascript] view plain copy
- {
- "title": "手游模拟器",
- "description": "电脑玩手游,挂机辅助神器",
- "type": "title",
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "-100px"
- }
- }
- },
只不过少了一个bigImg属性(因为他不需要);
但多了一个type属性,用于描述其将放置于哪个分类下面。
下面上JSON的全部内容:(共计661行)
[javascript] view plain copy
- [
- {
- "BigImg": [
- {
- "title": "微信清理",
- "description": "定期清理微信,节省手机空间",
- "bigImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "0px"
- }
- },
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "0px"
- }
- }
- },
- {
- "title": "雷电OS",
- "description": "雷电OS Editor 旧机变新机",
- "bigImg": {
- "ImgPosition": {
- "x": "-350px",
- "y": "0px"
- }
- },
- "commonImg": {
- "ImgPosition": {
- "x": "-600px",
- "y": "-500px"
- }
- }
- },
- {
- "title": "手机相册扩容",
- "description": "无损处理图片,腾出50%空间",
- "bigImg": {
- "ImgPosition": {
- "x": "-700px",
- "y": "0px"
- }
- },
- "commonImg": {
- "ImgPosition": {
- "x": "-700px",
- "y": "-500px"
- }
- }
- }
- ],
- "CommonImg": [
- {
- "title": "手游模拟器",
- "description": "电脑玩手游,挂机辅助神器",
- "type": "title",
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "360连回家",
- "description": "随时随地,清理家中电脑",
- "type": "title",
- "commonImg": {
- "ImgPosition": {
- "x": "-200px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "驱动大师",
- "description": "驱动安装一键解决",
- "type": "title",
- "commonImg": {
- "ImgPosition": {
- "x": "-300px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "安全桌面",
- "description": "一键整理您的桌面",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-400px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "隐私保镖",
- "description": "五层隐私防护,清理隐私痕迹",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-500px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "防黑加固",
- "description": "修补可能会被黑客利用的",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-600px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "软件管家",
- "description": "安全下载,轻松管理您的软件",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-400px",
- "y": "0px"
- }
- }
- },
- {
- "title": "人工服务",
- "description": "7*24小时为您解决电脑问题",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-500px",
- "y": "0px"
- }
- }
- },
- {
- "title": "手机助手",
- "description": "免费手机应用,资源下载平台",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-700px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "弹窗拦截",
- "description": "拦弹窗,去广告,就是给力",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-800px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "隔离沙箱",
- "description": "隔离系统真实环境运行软件",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-900px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "软件小助手",
- "description": "快速启动您常用软件",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "主页防护",
- "description": "防止恶意程序篡改浏览器主页",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "主页修复",
- "description": "一键解决浏览器主页相关问题",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-200px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "文件解密",
- "description": "免费还原被木马加密的文件",
- "type": "safe",
- "commonImg": {
- "ImgPosition": {
- "x": "-300px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "网络优化",
- "description": "全新家庭网络管理,秒踢蹭网",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-400px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "断网急救箱",
- "description": "上不了网?就用断网急救箱",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-600px",
- "y": "0px"
- }
- }
- },
- {
- "title": "免费WiFi",
- "description": "电脑变热点,免费无线上网",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-700px",
- "y": "0px"
- }
- }
- },
- {
- "title": "宽带测速器",
- "description": "获取网络带宽和上网速度数值",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-800px",
- "y": "0px"
- }
- }
- },
- {
- "title": "WiFi体检",
- "description": "检测并修复路由器安全隐患",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-500px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "流量防火墙",
- "description": "发现并阻止偷偷占流量的程序",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "-100px"
- }
- }
- },
- {
- "title": "LSP修复",
- "description": "修复网络异常和不能上网",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-600px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "DNS优选",
- "description": "杜绝网络差,启用更优DNS",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-700px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "寝室必备",
- "description": "看看哪个室友在占网速",
- "type": "network",
- "commonImg": {
- "ImgPosition": {
- "x": "-800px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "360壁纸",
- "description": "海量高清壁纸,美化电脑桌面",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-900px",
- "y": "-200px"
- }
- }
- },
- {
- "title": "急救盘",
- "description": "一盘在手,系统无忧",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "任务管理器",
- "description": "找出当前占用资源的程序",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-300px",
- "y": "0px"
- }
- }
- },
- {
- "title": "鲁大师",
- "description": "辨别硬件真伪,实时监测温度",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "默认软件",
- "description": "帮您设置常用的默认软件",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-200px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "查找大文件",
- "description": "找出占用磁盘空间的大文件",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-300px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "注册表瘦身",
- "description": "清理无效、错误的注册表键值",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-400px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "系统盘瘦身",
- "description": "通过瘦身解决系统盘空间不足",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-500px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "文件恢复",
- "description": "快速帮您恢复被误删的文件",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-600px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "系统急救箱",
- "description": "查杀顽固木马,修复系统异常",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-600px",
- "y": "0px"
- }
- }
- },
- {
- "title": "磁盘擦除",
- "description": "彻底清除磁盘数据,保护隐私",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-700px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "一键装机",
- "description": "装机必备软件一键搞定",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-800px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "右键管理",
- "description": "管理鼠标的右键菜单",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "-900px",
- "y": "-300px"
- }
- }
- },
- {
- "title": "系统重装",
- "description": "无需光盘,恢复系统初始状态",
- "type": "system",
- "commonImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "网游加速器",
- "description": "解决游戏卡机掉线,永久免费",
- "type": "game",
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "游戏大厅",
- "description": "小号多开不串号,键鼠回放爽",
- "type": "game",
- "commonImg": {
- "ImgPosition": {
- "x": "-200px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "游戏保险箱",
- "description": "保护游戏网银账号安全",
- "type": "game",
- "commonImg": {
- "ImgPosition": {
- "x": "-300px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "游戏优化器",
- "description": "一键解决玩游戏卡、慢问题",
- "type": "game",
- "commonImg": {
- "ImgPosition": {
- "x": "-400px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "360理财",
- "description": "360互联网金融服务平台",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-500px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "360看图",
- "description": "防范图片木马,安全查看照片",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-600px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "魔法摄像头",
- "description": "让视频聊天既安全又有趣",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-700px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "360云盘",
- "description": "安全免费,超大空间的云盘",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-200px",
- "y": "0px"
- }
- }
- },
- {
- "title": "C盘搬家",
- "description": "转移系统盘重要资料和文件",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-800px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "360问答",
- "description": "提出你的问题,分分钟有答案",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-900px",
- "y": "-400px"
- }
- }
- },
- {
- "title": "苹果设备清理",
- "description": "清理App垃圾,节省手机空间",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "-500px"
- }
- }
- },
- {
- "title": "360压缩",
- "description": "新一代的压缩软件,永久免费",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "-500px"
- }
- }
- },
- {
- "title": "健康精灵",
- "description": "可爱精灵,助您健康使用电脑",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-200px",
- "y": "-500px"
- }
- }
- },
- {
- "title": "小清新日历",
- "description": "查询天气、农历和节假日",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "0px"
- }
- }
- },
- {
- "title": "安全浏览器",
- "description": "恶意网站拦截,下载保护",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-300px",
- "y": "-500px"
- }
- }
- },
- {
- "title": "文件粉碎机",
- "description": "彻底粉碎无法删除的文件",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-400px",
- "y": "-500px"
- }
- }
- },
- {
- "title": "U盘鉴定器",
- "description": "鉴定U盘真实容量",
- "type": "smalltools",
- "commonImg": {
- "ImgPosition": {
- "x": "-500px",
- "y": "-500px"
- }
- }
- }
- ]
- }
- ]
为了适应type,接下来我们需要改造html模板:
将div.toolbox-all的dom结构改装成如下:
[javascript] view plain copy
- div.toolbox-all
- //这个是最上面的大图标那一行
- div.firstRow
- //以下是单个按钮
- //横线那一行,如果是多行app,应考虑使用另外一个
- div.dotted
- div.commonRow.title
- div.titleRow
- span.titleRow-left
- span.titleRow-text 电脑安全
- div.commonRow.safe
- div.titleRow
- span.titleRow-left
- span.titleRow-text 网络优化
- div.commonRow.network
- div.titleRow
- span.titleRow-left
- span.titleRow-text 系统工具
- div.commonRow.system
- div.titleRow
- span.titleRow-left
- span.titleRow-text 游戏优化
- div.commonRow.game
- div.titleRow
- span.titleRow-left
- span.titleRow-text 实用小工具
- div.commonRow.smalltools
这样通过type来定位该图标被添加的dom位置即可。
顺便,以上订正了一个之前把commonRow打成commanRow的问题。记得修改样式表(尴尬)
再顺便订正三个样式需要被调整的地方:
[css] view plain copy
- .back .contentbox .commonRow .normalTool .text .title {
- line-height: 25px;
- font-size: 16px;
- }
- .back .contentbox .commonRow .normalTool .text .description {
- line-height: 30px;
- font-size: 12px;
- color: #aaa;
- }
- .back .contentbox .commonRow .normalTool .addButton {
- display: none;
- position: absolute;
- top: 7px;
- right: 15px;
- width: 60px;
- height: 22px;
- background-image: linear-gradient(rgb(98, 227, 25) 0%, rgb(68, 208, 27) 100%);
- font-size: 12px;
- color: white;
- text-align: center;
- line-height: 20px;
- border: 1px solid rgb(65, 199, 36);
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- border-radius: 1px;
- }
下来呢,我们需要读取JSON,然后将其添加入页面之中;
首先,创建一个Tool类,他表示一个图标;
[javascript] view plain copy
- //单个工具
- var Tool = function (obj) {
- this.obj = obj;
- // 0表示未加载到我的工具,1表示加载到我的工具,2表示加载到我的工具的右下小窗处
- // 为了方便测试,这里先默认设置为1
- this.state = 1;
- //用于在全部工具页面
- this.createBigImgDom = function (callback) {
- var self = this;
- var obj = this.obj
- var str = '<div class="BigTool">' +
- '<span class="img" style="background-position: ' + obj.bigImg.ImgPosition.x + ' ' + obj.bigImg.ImgPosition.y + '"></span>' +
- '<span class="mask"></span>' +
- '<div class="text">' +
- '<div class="title">' + obj.title + '</div>' +
- '<div class="description">' + obj.description + '</div>' +
- '</div>' +
- '<div class="addButton">添加</div>' +
- '</div>';
- var node = $(str);
- node.click(function () {
- if (self.state) {
- callback();
- }
- })
- return node;
- };
- this.createNormalTool = function (callback) {
- var self = this;
- var obj = this.obj
- var str = '<div class="normalTool">' +
- '<div class="img" style="background-position: ' + obj.commonImg.ImgPosition.x + ' ' + obj.commonImg.ImgPosition.y + '"></div>' +
- '<div class="text">' +
- '<div class="title">' + obj.title + '</div>' +
- '<div class="description">' + obj.description + '</div>' +
- '</div>' +
- '<div class="addButton">添加</div>' +
- '</div>';
- var node = $(str);
- node.click(function () {
- if (self.state) {
- callback();
- }
- })
- return node;
- };
- this.createSmallTool = function (callback) {
- var obj = this.obj
- var position_x = parseInt(obj.commonImg.ImgPosition.x) * 0.615 + "px";
- var position_y = parseInt(obj.commonImg.ImgPosition.y) * 0.615 + "px";
- var str = '<div class="tool-foot">' +
- '<div class="img" style="background-position: ' + position_x + ' ' + position_y + '"></div>' +
- '<div class="text"></div>' +
- '</div>';
- var node = $(str);
- node.click(function () {
- if (self.state) {
- callback();
- }
- })
- return node;
- };
- }
他有三个方法,两个属性;
①obj属性是在创建的时候赋值给他的,方便读取创建实例时的初始值。这个初始值就是上面那个JSON中的一个元素(BigImg或CommonImg中的一个元素);
②state属性表示该按钮状态,具体看注释
三个方法的作用依次为:
①返回一个用于所有工具最顶端的大图标的dom;
②返回一个用于放置在所有工具、我的工具普通位置的dom;
③返回一个用于放在我的工具右下角小位置的dom;
④他们都有一个点击事件,会判断当前状态来进行。为了方便测试,我这里并没有针对性的设置。在之后会进行修改。
我们还缺一些其他的方法,例如将移动用的函数,点击后触发事件的函数等等;
还缺一些属性,例如,设置其目前是否可以移动,目前处于什么位置的东西等等;
等等我们再补全这个Tool类。
然后,我们需要创建一个加载JSON,处理数据的类。
在创建这个类之前,我们建立一个data文件夹,和img、javascripts、stylesheets文件夹平级;
将JSON命名为tools.json,并放于data文件夹中;
下面是处理这个JSON的JS代码类:
[javascript] view plain copy
- var ToolsConfigJsonLoad = function (url) {
- this.url = url ? url : "data/tools.json";
- this.load = function () {
- var self = this;
- $.ajax({
- url: self.url,
- dataType: "json",
- type: "GET",
- success: function (data) {
- self.addToolsInToolbox_all(data);
- }
- })
- };
- //将内容添加到全部工具页面中
- this.addToolsInToolbox_all = function (data) {
- var type = [];
- data[0].BigImg.forEach(function (obj) {
- var tool = new Tool(obj);
- var mixin = new MixinTool(tool);
- var callback = mixin.mixin()
- $(".firstRow").append(tool.createBigImgDom(callback));
- })
- data[0].CommonImg.forEach(function (obj) {
- if (type.indexOf(obj.type) < 0) {
- type.push(obj.type);
- }
- var tool = new Tool(obj);
- var mixin = new MixinTool(tool);
- var callback = mixin.mixin()
- $(".commonRow." + obj.type).append(tool.createNormalTool(callback));
- })
- this.addPlaceHolderWhenOnlyTwoToolsInToolbox_All(type);
- this.addDottedLineInToolbox_All();
- };
- // 这个目的是当某一行只有两个图标时,创造一个占位的图标
- this.addPlaceHolderWhenOnlyTwoToolsInToolbox_All = function (type) {
- type.forEach(function (obj) {
- var length = $(".commonRow." + obj + " > *").length;
- if (length % 3 == 2) {
- $(".commonRow." + obj).append($('<div class="normalToolHolder"></div>'));
- }
- })
- };
- // 这个目的是为了给全部工具中的多行工具之间添加分割线
- this.addDottedLineInToolbox_All = function () {
- $(".commonRow .normalTool:nth-child(3n+4)").before('<div class="dotted"></div>');
- }
- }
这部分代码最重要的是load函数;
①他会发起一个ajax请求,来读取这个json;
②ajax请求可以使用用户自己给的url(如果有的话),或者默认url;
③在请求成功后,会对数据进行处理,简单来说,分别遍历BigImg这个属性的每个元素以及CommonImg这个属性的每个元素;
④利用这些元素的数据,生成一个Tool实例,然后又对她做了一些其他事情(具体之后再说),然后生成一个dom对象,插入到指定位置。
在生成工具的时候,显然每个工具的用途是不同的,因此我们希望这个工具在点击的时候,执行不同的处理方法,具体做法有以下几种。
①生成Tool实例的时候,手动给起赋予一个处理函数(缺点:生成代码虎非常长,而且堆积在一起会很乱);
②将处理函数放在Tool类里,然后生成dom的时候,点击事件触发Tool了的不同方法(缺点:Tool类会非常长,并且可以通过Tool类的实例来调用本来不希望他调用的方法);
③将所有的处理方法集中在一个类之中,我们需要编辑的时候只需要编辑这个类即可,然后将对应的方法,作为回调函数传递给这个dom的创建函数,在创建函数里,调用这个回调函数(我的选择)。
我这里选择的是第三种方法,因此需要生成一个MixinTool类,他具备将对应的方法返回给对应的Tool类实例的功能。
为了区别不同按钮,我在JSON里每个元素里新加了一个属性ID,具体修改后内容如下;
[javascript] view plain copy
- {
- "title": "微信清理",
- "ID":"No0",
- "description": "定期清理微信,节省手机空间",
- "bigImg": {
- "ImgPosition": {
- "x": "0px",
- "y": "0px"
- }
- },
- "commonImg": {
- "ImgPosition": {
- "x": "-100px",
- "y": "0px"
- }
- }
- },
这里的ID的值,就是利用该元素生成Tool实例时,我们写在MixinTool类里,该元素预期拿取的点击事件处理函数。
MixinTool类的代码如下:
[javascript] view plain copy
- var MixinTool = function (tool) {
- this.mixin = function () {
- var self = this;
- if ("ID" in tool.obj & tool.obj.ID in this) {
- //console.log(self[tool.obj.ID])
- return self[tool.obj.ID];
- } else {
- return self.default;
- }
- };
- this.default = function () {
- console.log("No thing will happen");
- }
- this.No0 = function () {
- console.log("No 0 you click it");
- };
- this.No1 = function () {
- console.log("No 1 you click it");
- };
- this.No2 = function () {
- console.log("No 2 you click it");
- };
- this.No3 = function () {
- console.log("No 3 you click it");
- };
- this.No4 = function () {
- console.log("No 4 you click it");
- };
- this.No5 = function () {
- console.log("No 5 you click it");
- };
- }
他有一些方法,假如某个Tool实例没有对应的方法,他会执行default这个函数作为点击的响应事件;否则执行对应的。
mixin函数需要显示调用,作为Tool类创建dom结点时的参数使用。
具体如何使用参照上面的例子。
由于我们已经抽象出来多个类了,因此不如将之前页面切换的逻辑也抽象成一个类,具体代码如下:
[javascript] view plain copy
- //注意,这些其实都是全局变量
- var Tab = function () {
- //以下代码大量考虑到扩展性,例如,可以新增一个tab和content页面
- this.tabClick = function () {
- $(".tool").click(function () {
- //这里是上面的图标的逻辑变换
- if (!($(this.children[0]).hasClass("select"))) {
- $(".select").removeClass("select");
- $(this.children[0]).addClass("select");
- //这里是hover的横线的位置变化
- var node = $(".tool .hover");
- node.remove();
- //当动画需要停止的时候,让他停止
- if ('stop' in node) {
- node.stop();
- }
- node.css("left", "0px");
- $(this).append(node);
- //以下应该是切换页面的逻辑
- //获取切换到哪一个页面,
- var index = null;
- for (var i = 0; i < this.parentNode.children.length; i++) {
- if (this == this.parentNode.children[i]) {
- index = i;
- }
- }
- $(".contentbox > div").addClass("displayNONE");
- $(".contentbox > div:nth-child(" + (index + 1) + ")").removeClass("displayNONE");
- }
- })
- };
- this.tabMouseEnter = function () {
- $(".tool").mouseenter(function (evt) {
- //只有当鼠标移动到非当前选中的tab上时,才会移动
- if (!($(this.children[0]).hasClass("select"))) {
- var self = this;
- var node = $(".tool .hover");
- var start = null;
- var end = null;
- var tools = $(".toolTab")[0].children
- for (var i = 0; i < tools.length; i++) {
- if (self == tools[i]) {
- end = i;
- } else if ($(".select")[0].parentNode == tools[i]) {
- start = i;
- }
- }
- //停止之前的动画
- if ('stop' in node) {
- node.stop();
- }
- //现在开始动画效果
- node.animate({"left": (end - start) * 160 + "px"})
- }
- })
- };
- this.tabMouseLeave = function () {
- $(".tool").mouseleave(function () {
- //只有当鼠标移动到非当前选中的tab上时,才会移动
- if (!($(this.children[0]).hasClass("select"))) {
- var node = $(".tool .hover");
- //停止之前的动画
- if ('stop' in node) {
- node.stop();
- }
- node.animate({"left": "0px"})
- }
- })
- }
- }
而调用到目前为止的类和函数,十分简单,如代码:
[javascript] view plain copy
- $(document).ready(function () {
- //这里是点击切换显示页面
- var toolboxTab = new Tab();
- toolboxTab.tabClick();
- toolboxTab.tabMouseEnter();
- toolboxTab.tabMouseLeave();
- var jsonLoad = new ToolsConfigJsonLoad();
- jsonLoad.load();
- })
目前进度:
①自动生成所有工具里的所有工具;
②给工具添加点击响应事件;
目前还欠缺的内容:
①将所有工具里的工具,添加进我的工具;
②我的工具页面的各种逻辑;
③视情况,让工具可以被添加、或不能被添加(添加按钮在已添加后禁止显示)。