关于写jQuery插件是非常有必要的。这是前端学习其中必须经过的一个过程

对于初次写插件先想清楚原理      

(function($){ 

$.fn.yourName = function(options){ 

//各种属性、參数 



var options = $.extend(defaults, options); 

this.each(function(){ 

//插件实现代码 

}); 

}; 

})(jQuery);

这是一个基础的模板

当中的var options = $.extend(defaults, options);

1.$.extend()方法

$.extend()方法在JQuery中有两个使用方法。第一次是扩展方法。

第二个方法是

jQuery.extend([deep], target, object1, [objectN])

返回值:Object

把2个对象合并得到新的target,deep是可选的(递归合并)

合并 settings 和 options,改动并返回 settings。

jQuery 代码:
  1. var settings = { validate: false, limit: 5, name: "foo" };
  2. var options = { validate: true, name: "bar" };
  3. jQuery.extend(settings, options);
结果:
  1. settings == { validate: true, limit: 5, name: "bar" }

描写叙述:

合并 defaults 和 options, 不改动 defaults。

jQuery 代码:
  1. var empty = {};
  2. var defaults = { validate: false, limit: 5, name: "foo" };
  3. var options = { validate: true, name: "bar" };
  4. var settings = jQuery.extend(empty, defaults, options);
结果:
  1. settings == { validate: true, limit: 5, name: "bar" }
  2. empty == { validate: true, limit: 5, name: "bar" }

2中扩展:

第一种。看代码

$(function(){
jQuery.extend({
modalshow: function (options) {
var defaults = {
triggerID: 'LoginShow',
callback: function () { }
}<br>       //这里是$.extend的另外一种使用方法<br>       var opts = $.extend({},defaults, options);
if ($("#" + opts.triggerID)[0] == null)
{
var $triggerBTN = $('<input type="button" value="LoginShow" id=' + opts.triggerID
'/>');
$triggerBTN.bind("click"function ()
{
alert(opts.triggerID);
});
$("body").append($triggerBTN);
else {
$("#" + opts.triggerID).bind("click"function ()
{
alert(opts.triggerID);
})
}
}
});
$.modalshow();//这里是调用的地方,id为'loginshow'的button能够先不再HTML中加入能够自己主动生成
})

另外一种扩展

$(function(){
jQuery.fn.extend({
modalshow: function (options) {
var defaults = {
//这里的this是JQuery对象
triggerID: this.attr("id"),
callback: function () { }
}<br>       //这里是$.extend的另外一种使用方法<br>       var opts = $.extend(defaults, options);
$("#" + opts.triggerID).bind("click"function ()
{
alert(opts.triggerID);
})
}
});
$("#loginShow").modalshow();//这里是调用的地方。这里须要先在HTML中增加元素
})


我在这里写了一个比較完整的插件是关于选项卡的
//这个是html文件  我写的插件时引入的Tab.js
<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>无标题</title>

<style type="text/css">

     *{

      padding:0px;

      margin: 0px; 

     }

     .clear{

      clear: both;

     }

     .menu li{

      float: left;

      width: 100px;

      height: 30px;

      line-height: 30px;

      border:1px solid #ccc;

      border-bottom: 5px solid #ccc;;





     }

     .main{

      margin-top: 0px;

      width: 406px;

      height: 206px;

      overflow: hidden;

     }

     .main div{

         width: 403px;

         height: 200px;

         line-height: 200px;

         text-align: center;

         border:1px solid #000; 

     }

     .menu .on{

      border-bottom: 6px solid red;

     }

</style>

<script type="text/javascript" src="Jquery.js"></script>

    <script type="text/javascript" src="Tab.js"></script>

</head>

<body>

<div class="tabs">

<ul class="menu">

<li class="on">111</li>

<li>222</li>

<li>333</li>

<div class="clear"></div>

</ul>

<div class="main">

<div class="tab">AAA</div>

<div class="tab">BBB</div>

<div class="tab">CCC</div>

</div>

</div>





<script type="text/javascript">

$(document).ready(function() {

$('.tabs').myTab({

operate:'mouseover',

auto:false,

time:1000,

delay:true,

delaytime:0

})

        //利用闭包的原理,对于myTab函数中的一些元素进行初始化

});

</script>

</body>
</html>







//以下的是Tab.js文件凝视我写的比前清楚了








/***

 * 标题:选项卡插件

 * 编写时间:2015年7月14号

 * 作者:Helios

 * 邮箱:67487158@qq.com

***/

















;(function($){

$.fn.myTab=function(options){

return this.each(function(){

var defaults={

operate: 'click',

                auto: true,

                time: 4000,

                delay: true,

                delayTime: 500

}





var opts = $.extend(defaults, options),  //这里面两个參数的顺序不能改变。由于后面的那个时不会被覆盖掉的

//$.extend(defaults, options);表示的是假设options中的參数总是有值的话。那么options中的值将会取代defaults中的值

//假设options參数传入的值为空,那么就能够使用默认设置的值。

   self = $(this),  //获取当前的tabs

   items = self.children('ul.menu').children('li'),   //获取上面的是那三个

   tabBox = self.children('div.main'),  //获取到了main这个节点

   tabBoxItems = tabBox.children('div'),  // 获取mian以下的div

   timer;   //设置了一个定时器





var tabHandle = function(index){   //这是进行函数对选中的li和相应的div进行变换

items.siblings('li').removeClass('on').end().eq(index).addClass('on');

tabBoxItems.siblings().hide().end().eq(index).show();

//end()函数的使用方法,就是结束对当前节点的操作继续对曾经的那个节点继续操作

},





  delay = function(elem){  //这个延时函数

  opts.delay ?

setTimeout(function(){tabHandle(elem);},opts.delaytime) :tabHandle(elem); 

},

  start = function(){   //開始函数  假设參数设置了自己主动  就运行以下的第二行代码,假设没有设置的话就开启了定时器

  if(!opts.auto) return ;

  setInterval(autoRun,opts.time);





},

  autoRun =function(){   //自己主动播放函数

  var on = self.find('li.on'),    //获取当前on所在的li

  firstItem = items.eq(0),//设置默认第一个li

  len = items.length,  //

  index = on.index()+1,

  item = index ===len ? firstItem : on.next('li'),   //当前的索引假设等于li的总长度就返回默认的第一个,假设不是就是下一个

  i = index ===len ?

0 : index;   //   假设播放到了最后一个就跳转到第一个









  on.removeClass('on');    //移除当前li上面的样式

  item.addClass('on');  //把该选中的添加样式

  tabBoxItems.siblings().hide().end().eq(index).show();  // 更换div中的内容  和tabHandle 运行一样的操作





}

//bind() 方法为被选元素加入一个或多个事件处理程序,并规定事件发生时执行的函数。

//第一个參数传递事件,第二个參数还改事件相应的函数

items.bind(opts.operate, function () {

                var index = items.index($(this));

                delay(index)

            });





            if (opts.auto) {  //假设设置了auto的话推断成功

                start();

                self.hover(function () {      

                    clearInterval(timer);

                    timer = undefined;

                }, function () {

                    start();

                })

            }

})

}

})(jQuery);




关于jQuery写插件及其演示的更多相关文章

  1. 为jQuery写插件

    很多场合,我们都会调用jQuery的插件去完成某个功能,比如slider. 如下图,做一个div,通过“$( "#slider" ).slider();”的方式直接将div变成sl ...

  2. 实时更新数据的jQuery图表插件DEMO演示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. jQuery导航插件One-Page-Nav演示-显示命名锚记

    jQuery导航插件One-Page-Nav演示-显示命名锚记 简介 使用 选项 示例 推荐 简介 电商网站的分类比较明确,比如1楼是手机通讯产品,2楼是家用电器,3楼是服装鞋包等等,旁边还会有一个固 ...

  4. jquery写插件

    http://www.cnblogs.com/ajianbeyourself/p/5815689.html

  5. 如何使用jQuery写一个jQuery插件

    jQuery插件其实是前端框架的思维,构成一个框架,个人认为必须满足以下几个基础条件:1. 可重用,2. 兼容性,3. 维护方便,虽说现在有很多比较成熟的前端框架,但是也有部分存在配置麻烦,学习成本大 ...

  6. 自己动手写插件底层篇—基于jquery移动插件实现

    序言 本章作为自己动手写插件的第一篇文章,会尽可能的详细描述一些实现的方式和预备知识的讲解,随着知识点积累的一点点深入,可能到了后期讲解也会有所跳跃.所以,希望知识点不是很扎实的读者或者是初学者,不要 ...

  7. jquery.fullPage.js全屏滚动插件教程演示

    css部分(此处需要导入jquery.fullPage.css) <style> .section { text-align: center; font: 50px "Micro ...

  8. 分享7款非常实用的jQuery/CSS3插件演示和源码

    上次我们分享了15款效果很酷的最新jQuery/CSS3特效,非常不错,今天要分享7个非常实用的jQuery/CSS3插件演示和源码,一起来看看. 1.jQuery ajax点击地图显示商家网点分布 ...

  9. 用jQuery写了一个模态框插件

    用jQuery写了一个模态框插件 大家觉得下面的框框好看么, 水印可以去掉(这个任务交给你们了(- o -)~zZ); "info"框 $("div").con ...

随机推荐

  1. 网络测速命令--speedtest

    网络测速 speedtest-cli 顾名思义,这个命令为网络测速命令,基于Python编写,测试系统网络的上传下载速度,GitHub托管的项目地址,以下列出常见的用法 安装命令 pip instal ...

  2. PHP Web开发入门流程

    在学习WEB开发前,至少有一个对C或者计算机编程任何一种语言的基本学习,这会对你以后的开发有一定的启蒙作用. 一.Web开发入门 推荐学习网址: http://www.w3school.com.cn/ ...

  3. [Python3网络爬虫开发实战] 1.7.3-Appium的安装

    Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android.iOS等设备完成自动化测试,比如模拟点击.滑动.输入等操作,其官方网站为:http://appiu ...

  4. 关于latch: cache buffers chains的sql优化

    前段时间,优化了一些耗buffer比较多的sql,但是CPU使用率还是没下来 . 查看操作系统CPU使用率 查看awr,发现又有一条超级耗性能的sql冒出来了. 该SQL每次执行耗费3e多个buffe ...

  5. insert,extend

    #insert s = ['8','9','sfd',('45','00'),{'01':'56'}] s0 = [] while 1 : extend = input("请输入要添加的内容 ...

  6. 精帖转载(关于stock problem)

    Note: this is a repost(重新投寄) of my original post here with updated solutions(解决方案) for this problem ...

  7. Windows学习总结(11)——Windows批处理命令编写代码及小程序简介

    批处理(Batch)也称为批处理脚本.顾名思义,就是对某对象进行批量的处理.DOS批处理是基于DOS命令,用来自动地批量地执行DOS命令以实现特定操作的脚本.批处理是一种简化的脚本语言,它应用于DOS ...

  8. AndroidSweetSheet:从底部弹出面板(1)

     AndroidSweetSheet:从底部弹出面板(1) AndroidSweetSheet又是一个从底部弹出面板的开源项目.我在以前写的文章中介绍了不少这些项目,见附录文章5,6,7,8.现在 ...

  9. 前端开发:JavaScript---ECMAScript

    JavaScript:JavaScript是一种web前端的描述语言,也是一种基于对象(object)和事件驱动(Event Driven)的脚本语言.它运行在客户端从而减轻服务器的负担. js是一种 ...

  10. JS基础:函数

    函数声明和函数表达式 在 JS 中定义函数的方式有两种:一种是函数声明,一种是函数表达式. 例如: //函数声明 function fun() { ... } //函数表达式 var f = func ...