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($.load)事件的用法和分析
Apr 09 Javascript
javascript中的if语句使用介绍
Nov 20 Javascript
Javascript基础教程之switch语句
Jan 18 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
Nov 16 Javascript
通过隐藏iframe实现无刷新上传文件操作
Mar 16 Javascript
Bootstrap实现水平排列的表单
Jul 04 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
Dec 05 Javascript
简单实现js轮播图效果
Jul 14 Javascript
微信小程序实现折叠面板
Jan 31 Javascript
element-ui 时间选择器限制范围的实现(随动)
Jan 09 Javascript
javascript删除数组元素的七个方法示例
Sep 09 Javascript
Vue看了就会的8个小技巧
Jan 21 Vue.js
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实现一维数组转二维数组的方法
2015/02/25 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
python实现自动重启本程序的方法
2015/07/09 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Django如何实现上传图片功能
2019/08/16 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
总务岗位职责
2013/11/19 职场文书
十八大演讲稿
2014/05/22 职场文书
升职自荐信范文
2015/03/27 职场文书
朋友聚会开场白
2015/06/01 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
如何优化vue打包文件过大
2022/04/13 Vue.js