Js杂谈-插件包读后感
最近有幸得到了一份项目上的前端封装的插件库代码,花了一个下午时间,仔细地研读了一下。对于我很想做自己的类库,搞自己的组件包很有启蒙意义。
相比较我之前阅过的框架或是类库,这份比较简单。
项目是jQuery加上bootstrap搞定前端,部分样式还借鉴与jQuery UI。
源码什么的,就不贴了。
先来看主要代码框架
var Ch = {
.....
}
(function($){
....
})(jQuery)
(function($){
....
})(jQuery)
(function($){
....
})(jQuery)
Ch.App = {
.....
init:function(){
this.A();
this.B();
......
}
}
每一个匿名函数中存放着一个bootstrap插件相关的js方法。在一一定义完之后,通过Ch.App将所有定义完的js方法,写上各自的初始化方法,最后页面上调用Ch.App.init()完成所有插件的初始化工作。
举其中一个匿名函数
(function ($) {
// "use strict";
/*
* 使用ul li结构的目录移动。使用时使用jQuery获取父节点的jQuery对象,然后使用tile方法就可以实现向上运动。
* tile可以接受参数
* 如果是对象:比如{speed:1000}形式的,将会修改默认属性
* 如果想停止运动,依旧调用tile方法,加入参数'stop',即可停止运动
* */
var Tile = function () {
this.settings = {
speed: 5000
};
}, tile = new Tile();
Tile.prototype.method = {
init: function () {
return this.each(function (index) {
var $this = $(this),
timmerId = (new Date()).getTime() + index,
_height = $this.find("li").outerHeight(true);
$this.data("timmerId", timmerId);
setTimeout(function () {
Chemon.timmer[timmerId] = setInterval(function () {
$this.animate({"margin-top": "-" + _height + "px"}, 750, function () {
$this.css("margin-top", 0)
.find("li:first").detach().insertAfter($this.find("li:last"));
});
}, tile.settings.speed);
timmerId = null;
}, index * 2000);
//timmerId = null;
});
},
stop: function () {
return this.each(function (index) {
var timmerId = $(this).data("timmerId");
console.log(Chemon.timmer[timmerId]);
clearInterval(Chemon.timmer[timmerId]);
timmerId = null;
});
}
};
$.fn.tile = function () {
var arg0 = arguments[0],
method = tile.method.init,
args = [];
if (typeof(arg0) == "object") {
tile.settings = $.extend(tile.settings, arg0);
} else if (typeof(arg0) == "string" && tile.method[arg0]) {
method = tile.method[arg0];
args = Array.prototype.slice.call(arguments, 1);
} else if (arg0) {
$.error("METHOD '" + arg0 + "' DOES NOT EXIST ON jQuery.Tile");
return this;
}
arg0 = null;
return method.apply(this, args);
};
})(jQuery);
细分为3块看:
第一块:构造函数
var Tile = function () {
this.settings = {
speed: 5000
};
}, tile = new Tile();
创建一个Tile函数,它其中有默认的属性settings,并且初始化构造函数。
第二块:构造器的原型
Tile.prototype.method = {
init: function () {
return this.each(function (index) {});
},
stop: function () {
return this.each(function (index) {});
}
};
在Tile的原型上加入了init和stop两个方法。这时实例tile可以通过原型访问这两个方法。
第三块:绑定到jQuery对象上
$.fn.tile = function () {
var arg0 = arguments[0],
method = tile.method.init,
args = [];
。。。
return method.apply(this, args);
};
$.fn指的就是$.prototype,在$的原型上定义了一个tile的方法,此时名为tile的函数作用域中定义了一个method成员,它指向的是实例tile的原型方法init,如何将这个我们自定义的方法绑定到jQuery对象中去,关键在最后一步,通过apply,其中this为调用tile的对象,method为原型方法init,则实现了方法拥有者的转移。
具体每一个方法内部的实现就不解释了。纵观整个框架,比较容易理解。拓展性不是很强,与css的耦合太多。初始化js,需要很多html,css的配合。
内容不多,时间刚好。以上是本人读源码的一点体会,如有问题请指出,大家共同学习。
Js杂谈-插件包读后感的更多相关文章
- Sublime Text 2 JS 格式化插件 JsFormat的配置使用
(转自http://www.jb51.net/softjc/178401.html) 这里下载这插件包 https://github.com/jdc0589/JsFormat ,点油下角的zip就能下 ...
- Sublime Text 2 JS 格式化插件 JsFormat
这里下载这插件包 https://github.com/jdc0589/JsFormat ,点油下角的zip就能下载插件包放到sublime安装目录的DataPackages目录中重新打开sublim ...
- 在webpack中使用postcss之插件包precss
precss是一个预处理css的插件包,集成了很多postcss插件的功能,比如嵌套,变量,继承,混合,循环,判断.下面来介绍如何在webpack中使用precss.一.新建项目1.新建package ...
- Sublime Text 3 JS 格式化插件 JsFormat的配置使用
1.首先需要下载安装包:(下载地址:https://github.com/jdc0589/JsFormat) 2.插件包放到sublime安装目录的Data\Packages目录中 3.快捷键 Ctr ...
- PHPCMS v9插件包整合
插件包是已经修改好的文件集合,您可以直接将插件包复制到您的网站中. 注意:插件包会替换phpcms中的文件,如果您修改过phpcms中的文件请先备份好旧的文件. 1.下载插件包 2.解压 3.复制里面 ...
- Eclipse svn插件包
SVN插件下载地址及更新地址,你根据需要选择你需要的版本.现在最新是1.8.x Links for 1.8.x Release: Eclipse update site URL: http://sub ...
- Django 的css和js压缩插件:django_compressor
今天尝试了django_conpressor,一个在django框架中压缩css和js的插件,灰常有用 我把它加载在我的base的HTML template中,原来未经压缩的css和js是: < ...
- Sublime Text 2安装汉化破解、插件包安装教程
原文地址: Sublime Text 2安装汉化破解.插件包安装教程_百度经验 http://jingyan.baidu.com/article/ff4116259b057c12e48237b8.ht ...
- knob.js进度插件
关于knob.js进度插件的使用 关于这个插件,妹的,第一次使用坑死爹了,各种不会,幸亏我有持之以恒的精神,最终还是让其臣服于我的胯下.... 1. 引入 head 部分添加knob.js,同时引 ...
随机推荐
- (转)Oracle存储过程中的事务
本文转载自:http://www.cnblogs.com/linjiqin/archive/2011/04/18/2019990.html 1.事务用于确保数据的一致性,由一组相关的DML语句组成,该 ...
- 给安卓端调用的短信发送接口demo
package com.js.ai.modules.pointwall.action; import java.io.IOException; import java.util.HashMap; im ...
- java 高并发解决方案
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...
- Linux进阶路线
初级:熟练使用命令.熟悉Shell编程.能配置简单的服务,清楚各类服务相关的配置文件的位置, 能看懂并可修改系统提供的配置脚本(/etc/*.*)把/etc目录下面常用的配置你都搞懂,把 /bin / ...
- powerdesigner Oracle.sql转mysql.sql
将要导入的库的所有表的表结构(不要表数据,只要表结构)导出成一个.sql文件. 在PowerDesinger里找到 File -->> Reverse Engineer --->&g ...
- 微信公众号php从0开发,包括功能(自定义菜单,分享)
之前写的一篇微信公众号文章. 工作需要,进行此次调研,并记录开发过程. 开发目的,页面授权,页面获取用户头像,用户昵称 微信id, 分享页面. 微信订阅号 无法获取用户个人信息 写在记录前,公众号也是 ...
- 【原创】ubuntu14.04 LTS系统VMware虚拟机内Windows server 2008 r2系统的网络配置
主系统:ubuntu14.04 LTS 虚拟机:VMware 内系统:Windows server 2008 r2 主系统IP:任何IP 内系统IP:192.168.202.128(自动获取,如果不是 ...
- 动态规划——最长不下降子序列(LIS)
最长不降子序列是这样一个问题: 下面介绍动态规划的做法. 令 dp[i] 表示以 A[i] 结尾的最长不下降序列长度.这样对 A[i] 来说就会有两种可能: 如果存在 A[i] 之前的元素 A[j] ...
- Java多线程-新特征-阻塞栈LinkedBlockingDeque
对于阻塞栈,与阻塞队列相似.不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头. 这里要特别说明一点的是,阻塞栈是Java6的新特征.. Java为阻塞 ...
- xml和configparser模块
一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, 但至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过 ...