jquery插件制作教程 txtHover


Posted in Javascript onAugust 17, 2012

定义插件的结构骨架:

书中最开始使用的结构骨架如下:

jQuery.fn.fluginmane=function(){ 
return this.each(function(){ 


//code... 

}) 
}

这种结构不是很理想,特别书中提到,为了防止冲突例子不使用$,而使用jQuery。在这里,我们使用匿名函数的方式实现插件的结构骨架,这样就可以防止可能的冲突。也希望大家好好了解下匿名函数相关的知识。
(function($){ 
$.fn.fluginname=function(){ 


return this.each(function(){ 



//code... 


}); 

} 
})(jQuery);

注意点:

1.为了统一和规范,我们的插件文件都将以jquery.fluginname.js的形式命名(fluginname代表你插件的名字)。

2.我们使用到的函数都需要是私有的,不能被外部访问到,这样可保证插件不会受到外部的影响和干扰(匿名函数已经保证了这点)。

3.允许用户使用options控制插件的行为。

4.默认的options允许外部访问,这样用户就可以用最少的代码实现自定义化。

5.this.each()会遍历所有符合要求的对象,他本身是个jquery对象,插件最后返回该对象。其实通过这种方式就实现了javascript的链式模式。
我们的第一个插件:txtHover

1.代码实现:

(function($){ 
$.fn.txtHover=function(){ 


return this.each(function(){ 



$(this).text('text changed!'); 


}); 

} 
})(jQuery);

2.如何使用:

创建一个html文件,添加jquery和插件的引用,代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
<script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"></script> 
<script type="text/javascript" src="Scripts/jquery.txtHover.js"></script> 
<script type="text/javascript"> 
$(document).ready(function () { 
$('#test').txtHover(); 
}); 
</script> 
</head> 
<body> 
<div id="test"> 
this is test.</div> 
</body> 
</html>

添加hover事件:
(function ($) { 
$.fn.txtHover = function () { 
return this.each(function () { 
var temp = $(this).text(); 
$(this).hover(function () { 
$(this).text('text changed!'); 
}, function () { 
$(this).text(temp); 
}); 
}); 
} 
})(jQuery);

第一个版本,当页面加载完毕之后,div的内容就被修改了,这样的设计没多大用处。我们最常用到的是,当鼠标移到到文字上面的时候产生一些变化。改进的插件添加了hover事件。首先我们把div的原始值保存在变量temp里面,当鼠标移动到div上面的时候,文字被替换,鼠标移出时,将文字替换回来。
添加自定义选项

为了方便用户更加灵活的使用,我们需要添加自定义的功能,插件代码修改:

(function ($) { 
$.fn.txtHover = function (options) { 
var defaults = { txt: 'text changed!' }; 
var opt = $.extend(defaults, options); 
return this.each(function () { 
var self = $(this); 
var temp = self.text(); 
self.hover(function () { 
self.text(opt.txt); 
}, function () { 
self.text(temp); 
}); 
}); 
} 
})(jQuery);

插件定义了一个变量defaults,设置了默认的文字信息。我们使用$.extend()(不了解这个函数的朋友可以去查阅资料)方法扩展了一个新变量opt,如果用户传入的options变量包含txt,则opt就使用用户传入的,否则就使用系统默认的。我们在系统中定义了 var self = $(this),来代替this对象。this在javascript中是个很恼人的对象,在不同函数上下文中所代表的对象会不同,将this传给一个另外的变量会避免程序出现一些错误。不熟悉的朋友很有必要好好掌握该知识点。

用户在html页面上调用插件的时候,可以自定义鼠标移到div上面时候的文字内容了。
$(document).ready(function () {

$('#test').txtHover({ txt: 'test' });
});

好了,今天的例子到此为止。

Javascript 相关文章推荐
jquery ajax 登录验证实现代码
Sep 23 Javascript
JS中eval函数的使用示例
Jul 21 Javascript
JS判断移动端访问设备并加载对应CSS样式
Jun 13 Javascript
使用纯javascript实现经典扫雷游戏
Apr 23 Javascript
浅谈JavaScript 的执行顺序
Aug 07 Javascript
延时加载JavaScript代码提高速度
Dec 27 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
Dec 28 Javascript
Bootstrap学习笔记之环境配置(1)
Dec 07 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
Oct 18 Javascript
vue 实现Web端的定位功能 获取经纬度
Aug 08 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
IFrame跨域高度自适应实现代码
Aug 16 #Javascript
JSONP 跨域共享信息
Aug 16 #Javascript
js自执行函数的几种不同写法的比较
Aug 16 #Javascript
js三种排序算法分享
Aug 16 #Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 #Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 #Javascript
You might like
mysql总结之explain
2012/02/27 PHP
PHP微信红包API接口
2015/12/05 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
微信小程序关键字变色实现代码实例
2019/12/13 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
PyQt 线程类 QThread使用详解
2017/07/16 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
航空大学应届生求职信
2013/11/10 职场文书
学生会主席演讲稿
2014/04/25 职场文书
创建文明城市标语
2014/06/16 职场文书
单位在职证明书
2014/09/11 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
上课说话检讨书500字
2014/11/01 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
商超业务员岗位职责
2015/02/13 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
教你用python控制安卓手机
2021/05/13 Python
Java Spring Lifecycle的使用
2022/05/06 Java/Android
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server