自己动手开发jQuery插件教程


Posted in Javascript onAugust 25, 2011

因为工作需要,所以这几天琢磨了一下关于jQuery插件开发的问题,经过一天鏖战,终于完成自己动手做的第一个jQuery插件,对于俺这种见了css就头痛的人来说,一天时间8小时,保守估计有5个小时在弄css(我css文盲级别,形容得还不够贴切,如果说文盲不会写字,只会说话,那我是连话都不会说的级别。),好了,废话少说,切入正题。

首先要了解jQuery插件开发分两种,1.类级别的插件开发。2.对象级别插件开发。

什么? 你居然问什么是类级别和什么是对象级别?

类级别你可以理解为拓展jquery类,最简单的$.post(...);

对象级别则可以理解为基于对象的拓展,如$("#Me").fuck(...); 这里这个fuck呢,就是基于对象的拓展了。点到即止,想深入的童鞋请花RMB买书Or网上查资料,书上比俺介绍得更清楚。so...Next...

至于您要写一个什么东东呢?就轮到前面提到的类级别和对象级别的造型登场了,因为这写法大千世界无奇不有,千奇百怪,各有千秋,写法规范也不统一,俺就按俺觉得最简便的方法写了,Hava a Look!

<script type="text/javascript"> 
jQuery.msg = function () { 
alert("123"); 
}; 
</script> 
<script type="text/javascript"> 
$(function () { 
$.msg(); 
}); 
</script>

类级别写法:jQuery.插件名称=function(){.....};
调用方法:$.插件名称();
暴露参数这些东西,先暂时不提到。一步步来..
上面这玩意儿呢,弹出对话框插件,这么说,是先理解要紧,什么是插件,什么是类级别的插件?来看一下页面启动的效果,上图上真相,你懂的..
自己动手开发jQuery插件教程
来比较一下对象级别插件写法:Go on!
(function($) { 
$.fn.pluginName = function() { 
// 代码区域。 
}; 
})(jQuery);

对象级别写法:$.fn.插件名称 = function(){};多了一个fn,没错,是fn! fn!!! fn!!!

调用方法:$("#Me").插件名称();

稍微说一下,$.插件名称();是通过$访问调用jquery中的全局函数,直接可以通过jquery或者美元$调用,从而实现一些效果。

$("#Me").插件名称();是通过一个jquery对象所调用的一个函数,什么? 你居然发现这个写法外面一层多了个东东? 阿? 你问怎么回事?

The First,我们必须先了解一下闭包这个玩意儿的造型(框架),Look!,这就是传说中用来开发jQuery插件的东东

(function($){ 
//这里是您写东东的地方,不收地税,工商税,个人所得税等..放心大胆使用。 
})(jQuery);

(function($){ //这里是您写东东的地方,不收地税,工商税,个人所得税等..放心大胆使用。})(jQuery);

这里function 后面的$参数,形参,在函数体内部的使用呢,$就是当前您当前整在调用该函数的对象了,这样就能干很多事了....你懂的。

用一个tabs面板切换插件来详细演示一下jQuery对象级别插件的具体开发,直接上代码。

首先上HTML:

<!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 src="jquery-1.6.2.min.js" type="text/javascript"></script> 
<script src="jquery.tabs.js" type="text/javascript"></script> 
<link href="tabs.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript"> 
$(function () { 
$("#mytabs").tabs(); 
}); 
</script> 
</head> 
<body> 
<!--tabs示例--> 
<div id="mytabs"> 
<!--选项卡区域--> 
<ul> 
<li><a href="#tabs1">选项1</a></li> 
<li><a href="#tabs2">选项2</a></li> 
<li><a href="#tabs3">选项3</a></li> 
</ul> 
<!--面板区域--> 
<div id="tabs1">11111</div> 
<div id="tabs2">22222</div> 
<div id="tabs3">33333</div> 
</div> 
</body> 
</html>

再上插件源码:

/*
tabs面板插件,版本1.0(2011.08.24)
用法:$("#myDiv").tabs({switchingMode:"click"});
参数解释:switchingMode是面板切换的模式,如switchingMode:"mouseover"则鼠标移动至选项卡切换面板,默认为click。
整体tabs骨架不变,依然是常用的结构如下:

<div id="tabs"> 
选项卡区域ul 
<ul> 
<li><a href="#div1">选项1</a></li> 
<li><a href="#div2">选项2</a></li> 
</ul> 
面板区域div 
<div id="div1">面板1</div> 
<div id="div2">面板2</div> 
</div>

样式:此样式为默认无任何效果样式,可根据需要修改插件样式。
*/ 
; (function ($) { 
$.fn.tabs = function (options) { 
var defualts = { switchingMode: "click" }; 
var opts = $.extend({}, defualts, options); 
var obj = $(this); 
var clickIndex = 0; 
obj.addClass("tabsDiv"); 
$("ul li:first", obj).addClass("tabsSeletedLi"); 
$("ul li", obj).not(":first").addClass("tabsUnSeletedLi"); 
$("div", obj).not(":first").hide(); 
$("ul li", obj).bind(opts.switchingMode, function () { 
if (clickIndex != $("ul li", obj).index($(this))) { 
clickIndex = $("ul li", obj).index($(this)); 
$(".tabsSeletedLi", obj).removeClass("tabsSeletedLi").addClass("tabsUnSeletedLi"); 
$(this).removeClass("tabsUnSeletedLi").addClass("tabsSeletedLi"); 
var divid = $("a", $(this)).attr("href").substr(1); 
$("div", obj).hide(); 
$("#" + divid, obj).show(); 
}; 
}); 
}; 
})(jQuery);

接下来上插件样式:
body{background-color: black;} 
.tabsDiv{width: 500px;height: 350px;margin-top: 0px;margin-left: 0px;} 
.tabsDiv ul{width: 500px;height: 20px;list-style: none;background-color: black;margin-bottom: 0px;margin: 0px;padding: 0px;} 
.tabsDiv div{width: 500px;height: 330px;background-color: white;} 
.tabsSeletedLi{width: 100px;height: 20px;background-color: white;float: left;text-align: center;} 
.tabsSeletedLi a{width: 100px;height: 20px;color: black;} 
.tabsUnSeletedLi{width: 100px;height: 20px;background-color: black;float: left;text-align: center;} 
.tabsUnSeletedLi a{width: 100px;height: 20px;color: white;}

最终效果图,你懂的:
自己动手开发jQuery插件教程

自己动手开发jQuery插件教程

自己动手开发jQuery插件教程
原文:http://www.cnblogs.com/JohnStart/archive/2011/08/24/jQueryPlugin.html
Javascript 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
Nov 20 Javascript
密码强度检测效果实现原理与代码
Jan 04 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
Jul 17 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
举例讲解如何判断JavaScript中对象的类型
Apr 22 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
May 24 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
JS实现的驼峰式和连字符式转换功能分析
Dec 21 Javascript
vue实现滑动到底部加载更多效果
Oct 27 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 Vue.js
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
Aug 23 #Javascript
基于JQuery的Select选择框的华丽变身
Aug 23 #Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 #Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
Aug 23 #Javascript
jQuery页面滚动浮动层智能定位实例代码
Aug 23 #Javascript
jqGrid jQuery 表格插件测试代码
Aug 23 #Javascript
30个精美的jQuery幻灯片效果插件和教程
Aug 23 #Javascript
You might like
一个php作的文本留言本的例子(三)
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
php的一个登录的类 [推荐]
2007/03/16 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
超市后勤自我鉴定
2014/01/17 职场文书
5s标语大全
2014/06/23 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python