JQuery编写自己的插件(七)
一:jQuery插件的编写基础
1、插件的种类
编写插件的目的是给一系列已经方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率。
常见的种类有以下三种:
封装对象方法的插件
二:编写自己的插件
1、封装jQuery对象方法的插件
Step1:框架
;(
function($) {
$.fn.extend({
….
});
}
)(jQuery)
实例:改变背景色
;( function($) { $.fn.extend({ "color": function(value) { return this.css("color", value); }, "bgcolor": function(value) { return this.css("background-color", value); } }); } )(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 src="Scripts/jquery-1.2.6.js" type="text/javascript"></script> <script src="Scripts/jquery-1.2.6-vsdoc-cn.js" type="text/javascript"></script> <script src="Scripts/jquery.color.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { $("div").click(function() { $(this).bgcolor(this.innerText); }); }); </script> </head> <body> <div>red</div> <div>blue</div> <div>green</div> </body> </html>
2.编写全局函数插件
Step1:写一个封装全局函数的插件
;(
function($) {
$.extend({
….
});
}
)(jQuery)
代码:去除空格
;( function($) { $.extend({ ltrim: function(text) { return text.replace(/^\s+/g, ""); }, rtrim: function(text) { return text.replace(/\s+$/g, ""); } }); } )(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 src="Scripts/jquery-1.2.6.js" type="text/javascript"></script> <script src="Scripts/jquery-1.2.6-vsdoc-cn.js" type="text/javascript"></script> <script src="Scripts/jquery.trim.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { var teststr = " test "; alert(teststr.length); var s1 = $.ltrim(teststr); alert(s1.length); var s2 = $.rtrim(teststr); alert(s2.length); }); </script> </head> <body> </body> </html>
3.编写自已的插件-MyModalForm
Step1:写一个封装全局函数的插件
;(
function($) {
$.extend({
….
});
}
)(jQuery)
效果:
代码:
;( function($) { var divW; //DIV宽度 var divH; //DIV高度 var clientH; //浏览器高度 var clientW; //浏览器宽度 var divTitle; //DIV标题 var pageUrl; //DIV中加载的页面 var div_X; //DIV横坐标 var div_Y; //DIV纵坐标 $.extend({ //清除背景锁定 clearLockScreen: function() { $("#divLock").remove(); }, //清除DIV窗口 clearDivWindow: function() { $("#divWindow").remove(); }, //返回弹出的DIV的坐标 divOpen: function() { var minTop = 80; //弹出的DIV记顶部的最小距离 if ($("#divWindow").length == 0) { clientH = $(window).height(); //浏览器高度 clientW = $(window).width(); //浏览器宽度 div_X = (clientW - divW) / 2; //DIV横坐标 div_Y = (clientH - divH) / 2; //DIV纵坐标 div_X += window.document.documentElement.scrollLeft; //DIV显示的实际横坐标 div_Y += window.document.documentElement.scrollTop; //DIV显示的实际纵坐标 if (div_Y < minTop) { div_Y = minTop; } $("body").append("<div id='divWindow'><div id='divTitle'><img src='images/Close-1.gif' id='x' /></div><div id='divContent'>载入中...</div></div>"); //增加DIV //divWindow的样式 $("#divWindow").css("position", "absolute"); $("#divWindow").css("z-index", "200"); $("#divWindow").css("left", (div_X + "px")); //定位DIV的横坐标 $("#divWindow").css("top", (div_Y + "px")); //定位DIV的纵坐标 $("#divWindow").css("opacity", "0.9"); $("#divWindow").width(divW); $("#divWindow").height(divH); $("#divWindow").css("background-color", "#FFFFFF"); $("#divWindow").css("border", "solid 1px #333333"); //divTitle的样式 $("#divTitle").css("height", "20px"); $("#divTitle").css("line-height", "20px"); $("#divTitle").css("background-color", "#333333"); $("#divTitle").css("padding", "3px 5px 1px 5px"); $("#divTitle").css("color", "#FFFFFF"); $("#divTitle").css("font-weight", "bold"); //x的样式 $("#x").css("float", "right"); $("#x").css("cursor", "pointer"); //divContent的样式 $("#divContent").css("padding", "10px"); } else { clientH = $(window).height(); //浏览器高度 clientW = $(window).width(); //浏览器宽度 div_X = (clientW - divW) / 2; //DIV横坐标 div_Y = (clientH - divH) / 2; //DIV纵坐标 div_X += window.document.documentElement.scrollLeft; //DIV显示的实际横坐标 div_Y += window.document.documentElement.scrollTop; //DIV显示的实际纵坐标 if (div_Y < minTop) { div_Y = minTop; } $("#divWindow").css("left", (div_X + "px")); //定位DIV的横坐标 $("#divWindow").css("top", (div_Y + "px")); //定位DIV的纵坐标 } }, //锁定背景屏幕 lockScreen: function() { if ($("#divLock").length == 0) { //判断DIV是否存在 clientH = $(window).height(); //浏览器高度 clientW = $(window).width(); //浏览器宽度 $("body").append("<div id='divLock'></div>") //增加DIV $("#divLock").height(clientH); $("#divLock").width(clientW); $("#divLock").css("display", "block"); $("#divLock").css("background-color", "#000000"); $("#divLock").css("position", "fixed"); $("#divLock").css("z-index", "100"); $("#divLock").css("top", "0px"); $("#divLock").css("left", "0px"); $("#divLock").css("opacity", "0.5"); } else { clientH = $(window).height(); //浏览器高度 clientW = $(window).width(); //浏览器宽度 $("#divLock").height(clientH); $("#divLock").width(clientW); } }, ShowModalForm: function(divWidth, divHeight, title, url) { divW = divWidth; //DIV宽度 divH = divHeight; //DIV高度 divTitle = title; //DIV高度 pageUrl = url; //DIV中加载的页面UR $.lockScreen(); //锁定背景 $.divOpen(); $("#divTitle").append(divTitle); $("#divContent").load(pageUrl, function() { //加上拖动的效果 $.AttachDrag("divWindow"); }); //交换X图片 $("#x").hover( function() { $(this).attr("src", "images/Close-2.gif"); }, function() { $(this).attr("src", "images/Close-1.gif"); } ); //关闭DIV窗口 $("#x").click( function() { $.clearDivWindow(); $.clearLockScreen(); }); //窗口大小改变时 $(window).resize( function() { if ($("#divLock").length != 0) { $.lockScreen(); } if ($("#divWindow").length != 0) { $.divOpen(); } } ); } }); } )(jQuery)
调用的代码:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Demo3.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>封装全局函数的插件Demo</title> <link href="CSS/Main.css" rel="stylesheet" type="text/css" /> <script src="Scripts/jquery-1.2.6.js" type="text/javascript"></script> <%-- <script src="Scripts/jquery-1.2.6-vsdoc-cn.js" type="text/javascript"></script>--%>
//拖动的js
<script src="Scripts/jquery.modalform.js" type="text/javascript"></script>
//弹出窗体 注意引用的顺序
<script src="Scripts/jquery.modalform.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { $("a").click(function() { $.ShowModalForm(500, 320, '封装全局函数的插件Demo', 'GetStudentInfo.aspx'); }); }); </script> </head> <body><a href="javascript:void(0)">点此演示</a> </body> </html>
CSS样式:
@charset "utf-8"; * { margin: 0px; padding: 0px; } /* download by http://www.codefans.net */ body { margin: 50px; font-family: Arial, "宋体"; font-size: 12px; }
四:隔行变色:
效果:
插件代码:
jquery.alterBgColor.js
; (function($) { $.fn.extend({ "alterBgColor": function(options) { options = $.extend({ odd: "odd", //偶数行的样式 even: "even", //奇数行的样式 selected: "selected" //选中行的样式 }, options); $("tbody>tr:odd", this).addClass(options.odd); $("tbody>tr:even", this).addClass(options.even); $("tbody>tr", this).click(function() { //判断当前是否选中 var hasSelected = $(this).hasClass(options.selected); //如果已经有了selected样式,则移除,否则则添加上selected样式 //$(this)[hasSelected ? "removeClass" : "addClass"](options.selected); if (hasSelected) $(this).removeClass(options.selected).find(":checkbox").attr("checked", false); else $(this).addClass(options.selected).find("checkbox").attr("checked", true); }); //如果有行checkbox选中的,默认情况下,让背景高亮度 $("tbody>tr:has(:checked)", this).addClass(options.selected); return this; //返回一个jquery 对象,让此方法可链 } }); })(jQuery);
调用的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> table { border:0;border-collapse:collapse;} td { font:normal 12px/17px Arial;padding:2px;width:100px;} th { font:bold 12px/17px Arial;text-align:left;padding:4px;border-bottom:1px solid #333;} .even { background:#FFF38F;} /* 偶数行样式*/ .odd { background:#FFFFEE;} /* 奇数行样式*/ .selected { background:#FF6500;color:#fff;} </style> <!-- 引入jQuery --> <script src="Scripts/jquery-1.2.6.js" type="text/javascript"></script> <script src="Scripts/jquery.alterBgColor.js" type="text/javascript"></script> <script type="text/javascript"> //插件应用 $(function(){ $("#table2") .alterBgColor() //应用插件 .find("th").css("color","red");//可以链式操作 }) </script> </head> <body> <table id="table1"> <thead><tr><th> </th><th>姓名</th><th>性别</th><th>暂住地</th></tr></thead> <tbody> <tr> <td><input type="checkbox" name="choice" value=""/></td> <td>张山</td> <td>男</td> <td>浙江宁波</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" /></td> <td>李四</td> <td>女</td> <td>浙江杭州</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" checked="checked" /></td> <td>王五</td> <td>男</td> <td>湖南长沙</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" /></td> <td>找六</td> <td>男</td> <td>浙江温州</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" /></td> <td>Rain</td> <td>男</td> <td>浙江杭州</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" checked="checked" /></td> <td>MAXMAN</td> <td>女</td> <td>浙江杭州</td> </tr> </tbody> </table> <br /><br /> <table id="table2"> <thead><tr><th> </th><th>姓名</th><th>性别</th><th>暂住地</th></tr></thead> <tbody> <tr> <td><input type="checkbox" name="choice" value=""/></td> <td>张山</td> <td>男</td> <td>浙江宁波</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" /></td> <td>李四</td> <td>女</td> <td>浙江杭州</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" checked="checked" /></td> <td>王五</td> <td>男</td> <td>湖南长沙</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" /></td> <td>找六</td> <td>男</td> <td>浙江温州</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" /></td> <td>Rain</td> <td>男</td> <td>浙江杭州</td> </tr> <tr> <td><input type="checkbox" name="choice" value="" checked="checked" /></td> <td>MAXMAN</td> <td>女</td> <td>浙江杭州</td> </tr> </tbody> </table> </body> </html>
五:鼠标拖动:myDragLibrary.js
var MyDragHandler = { DragPanelId: "divContext", _idiffx: 0, _idiffy: 0, _Div: null, AttachDrag: function(dragId) { if (dragId) MyDragHandler._Div = document.getElementById(dragId); else MyDragHandler._Div = document.getElementById(MyDragHandler.DragPanelId); document.body.onmousedown = MyDragHandler._handleMouseDown; }, _handleMouseDown: function() { var oEvent = window.event; if (MyDragHandler._Div) { MyDragHandler._idiffx = oEvent.clientX - MyDragHandler._Div.offsetLeft; MyDragHandler._idiffy = oEvent.clientY - MyDragHandler._Div.offsetTop; document.body.onmousemove = MyDragHandler._handleMouseMove; document.body.onmouseup = MyDragHandler._handleMouseUp; } }, _handleMouseMove: function() { var oEvent = window.event; MyDragHandler._Div.style.left = oEvent.clientX - MyDragHandler._idiffx; MyDragHandler._Div.style.top = oEvent.clientY - MyDragHandler._idiffy; MyDragHandler._Div.style.cursor = "move"; }, _handleMouseUp: function() { document.body.onmousemove = null; document.body.onmouseup = null; MyDragHandler._Div.style.cursor = "default"; } }
调用的代码:
<!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> <style type="text/css"> #div1 { background-color: red; height: 100px; width: 100px; position: absolute; } </style> <script src="Scripts/jquery-1.2.6.js" type="text/javascript"></script> <script src="Scripts/jquery.myDragLibrary.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { $.AttachDrag("div1"); }); </script> </head> <body> <div id="div1"></div> </body> </html>