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 相关文章推荐
document.open() 与 document.write()的区别
Aug 13 Javascript
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 Javascript
javascript克隆对象深度介绍
Nov 20 Javascript
2则自己编写的jQuery特效分享
Feb 26 Javascript
js+canvas绘制五角星的方法
Jan 28 Javascript
浅谈Javascript数组(推荐)
May 17 Javascript
AngularJS入门教程之数据绑定原理详解
Nov 02 Javascript
微信小程序 slider 详解及实例代码
Jan 10 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
Jul 13 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
完美解决iview 的select下拉框选项错位的问题
Mar 02 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
Jun 24 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
php桌面中心(四) 数据显示
2007/03/11 PHP
实用函数4
2007/11/08 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
php把数组值转换成键的方法
2015/07/13 PHP
微信支付开发告警通知实例
2016/07/12 PHP
php 中的closure用法详解
2017/06/12 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
js轮播图代码分享
2016/07/14 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
了解VUE的render函数的使用
2017/06/08 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
vue按需加载实例详解
2019/09/06 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
python中的字典使用分享
2016/07/31 Python
python 读入多行数据的实例
2018/04/19 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
python数据类型强制转换实例详解
2020/06/22 Python
导致python中import错误的原因是什么
2020/07/01 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
手术室护士节演讲稿
2014/08/27 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
Java 超详细讲解hashCode方法
2022/04/07 Java/Android