hold住,我们要开始动真格了!

是的,看到这个标题,你一定也和我一样迫不及待了,因为我们不像之前那篇教程一样小打小闹了,我们现在要动真格了, 这次我们要写的插件是上个插件的增强版本.而这个插件包含主流的插件的完整骨架.换句话说,就是我们的插件会变 得更加的专业,更加的规范化,当然.也显得我们牛逼了.OK,我们现在就开始着手!

第一个版本

今天,你的客户告诉你,需要开发一个这样的插件,第一步是:选中整篇文章,并改变颜色,鼠标移过去的时候.表示读者已经 读过这一段,需要把颜色变成初始的颜色,好的.这个就是全部了,你想着.嗯,应该是挺简单的.因为在上一篇教程我们已经讲解了 一些关于最基本的概念,并完成了一个类似的插件.如果你忘记了,那你可以回去复习一下.->传送门,好了,让 我们来先看看第一个版本的代码

 1 (function($){ 2     $.fn.highlight = function(color){ 3             return this.each(function() { 4             $(this) 5             .data('orginColor',$(this).css('backgroundColor')) 6             .css('backgroundColor',color) 7             .one('mouseover',function() { 8                 $(this).animate({backgroundColor:$(this).data('orginColor')},'slow'); 9             })10         })11     }12  })(jQuery)

上面的脚本也许你已经很熟悉了,因为我们上一篇就是差不多这样了,只是多一个data来放置我们初始的颜色而已,然后就是设置了 一下样式,最后就是用one绑定了一次的鼠标移过事件而已,这里我要特别声明一下.因为我们为了效果更好.所以使用了颜色渐变.如果你对 jQuery的animate足够了解的话.你就应该知道jQuery原生版本的backgroundColor是不能设置颜色的逐渐变换的.所以我们需要引入 jQuery UI类库,这样就能够实现逐渐变换了(如果以后有人来问你为什么不能实现颜色渐变的时候,果断推荐这个方法),注意,这不是必 须的.我们这里只是演示效果而已,我会提供jQuery UI,在文章最后的附件中,现在我们来试试插件的效果

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 3 <head> 4     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 5     <title>插件测试</title> 6     <script src="http://code.jquery.com/jquery-1.6.min.js" type="text/javascript" charset="utf-8"></script> 7     <script src="jquery-ui-1.8.16.custom.min.js" type="text/javascript" charset="utf-8"></script> 8     <script src="jQuery-superLight.js" type="text/javascript" charset="utf-8"></script> 9     <script type="text/javascript" charset="utf-8">10         jQuery(function(){11                 $('h1').hide().superLight('lightblue').slideDown();12         })13     </script>14     <style type="text/css" media="screen">15         h1{ background:pink;}16     </style>17 </head>18 <body>19     <h1>hello world</h1>20     <h1>hello weiqun</h1>21 </body>22 </html>

看到了吧,基本效果已经出来了,移过去的时候.颜色确实变了,而且也支持了链式的写法,这样你信心满满的拿给了你的客户,你开始 想象着客户那绽开的笑脸了,刚开始的时候,客户也反馈这个superLight插件确实给他们带来了很大的方便.公司的那些不懂js的MM也学 会了怎么使用这个简单的插件了,可是,过了几天之后,有些人就开始反映了,因为她们每次使用这个插件的时候,总是要提供一个颜色的 参数给它,如果有个默认的值就好了,其实这还不是什么大问题,有些反馈回来说,这个插件啊,怎么不能设置颜色渐变的速度 啊(animate的时间参数),有的读者希望能让那个好看的渐变久一些.有的读者甚至不想要那个渐变的过程了.还有啊...

第二个版本

遇到这个问题,也许我们一般的做法就是为color提供一个默认值,然后无非多加一个duration参数就是了,然后也提供一个默认值 可是这样却有一个问题.就是以后也许还有更多的参数希望被添加进来,所以你开始思考了,是不是也该有更好的方法去解决这个问题. 既可以提供默认值,又可以让用户自己设置.当然,参数的个数也是需要用户自己来选择的.对于这个问题,我们这就来解决掉.让我们 有请extend()函数出场.关于这个函数的更多的用法,这里有更多的解释->传送门.我们只需要合并的那个功能,具体的 代码是这样的:

 1 (function($){ 2     $.fn.superLight = function(options) { 3         $.fn.superLight.defaults = { 4             'color':'lightblue',  5             'duration':'fast', 6         }; 7         options = $.extend($.fn.superLight.defaults,options); 8         return this.each(function() { 9             $(this)10             .data('orginColor',$(this).css('backgroundColor'))11             .css('backgroundColor',options.color)12             .one('mouseover',function() {13                 $(this).animate({backgroundColor:$(this).data('orginColor')},options.duration);14             })15         })16     }17 })(jQuery)

首先我们看看$.fn.superLight.defaults,我们在superLight中增加了一个默认的属性,这个默认的属性提供了两个参数,color和 duration,这个是为我们提供默认值而设置的.然后我们看下一行的代码, options = $.extend($.fn.superLight.defaults,options); 这句话是什么意思呢.如果你看了上面那篇关于extend的文章,你就会知道,这个其实是起到了合并的作用,如果你提供了一个options 参数,那么它将会覆盖掉原来的默认值,如果没有提供的话,就使用我们默认提供的那个.这样做的好处就是能更好的管理我们的参数. 客户也可以自由的去选择需要,让我们试试看效果

1 $('h1').hide().superLight().slideDown();//省略掉参数,你会看到默认的是浅蓝色2 $('h1').hide().superLight({'color':'yellow'}).slideDown();//设置颜色.你会看到黄色的背景色3 $('h1').hide().superLight({'color':'yellow','duration':5000}).slideDown();//你会看到颜色逐渐的变成粉红色

很棒吧,这样我们我们把更多的选择让给了客户,他们可以自由的去选择,接着我们得来收尾了,我们要完善这个插件,我们需要 给这个插件一个回调函数,就是说,在执行完这个效果之后,需要执行一个函数.就是这样,现在我们学会了怎么设置默认参数了 所以现在要添加一个功能就简单多了

第三个版本

 1 (function($){ 2     $.fn.superLight = function(options) { 3         $.fn.superLight.defaults = { 4             'color':'#fff47f',  5             'duration':'fast', 6             'complete':null     7         }; 8         options = $.extend($.fn.superLight.defaults,options); 9         $.isFunction(options.complete)||(options.complete = null);10         return this.each(function() {11             $(this)12             .data('orginColor',$(this).css('backgroundColor'))13             .css('backgroundColor',options.color)14             .one('mouseover',function() {15                 $(this).animate({backgroundColor:$(this).data('orginColor')},options.duration,options.complete);16             })17         })18     }19 })(jQuery)

html:

1 $('h1').hide().superLight({'color':'yellow','duration':2000,'complete':function(){$(this).css('border','1px solid black')}}).slideDown();

上面的代码只是比之前的代码新添加了一个complete而已,然后需要注意的就是$.isFunction函数的使用了,这个看名字大概就知道 了,判断是不是一个函数.这里如果不是函数的话,则设置为空,防止用户传入的不是函数,然后还有要提出的一点就是,如果你是在一个 点击事件(或者会影响到this上下文的指针丢失的其他事件)中使用options.complete,例如这样:.bind('click',function(){options.complete.call(this)}) 你可能需要这样使用options.complete.call(this),把this上 下文绑定在这上面.这是要需要注意的地方,这样,我们的这个插件大概就写好了.

总结

到这里,我们的这种类型的插件就完成了,和上面说的一样.代码不多,可是,那些该具备的都具备了,默认参数.回调,这些都实现 了,希望这篇教程能够抛砖引玉,你能写出更多的优质的插件.那时候,请告诉我,我也知道我写这篇教程,是有价值的,下一篇教程,我们 将要编写另一种工具函数类的插件,让我们期待下一篇吧

ps:本篇教程的源码参考自<<jQuery菜鸟到忍者>>一书

这里是教程源码下载地址->点击下载

如果你喜欢.请关注我->这里

转载于:https://www.cnblogs.com/qq583451067/archive/2011/09/24/2188335.html

自己动手写一个jQuery插件(第二篇)相关推荐

  1. 自己动手写一个JQuery插件(第二篇)(转)

    1.Hold住,我们要开始动真格了! 是的,看到这个标题,你一定也和我一样迫不及待了,因为我们不像之前那篇教程一样小打小闹了,我们现在要动真格了,这次我们要写的插件是上个插件的增强版本.而这个插件包含 ...

  2. 如何写一个Jquery 的Plugin插件

    JQuery Plugin插件,如果大家不明白什么是JQuery插件或都不清楚如何编写可以查看其官方的网站:jQuery Authoring Guidelines 好了,下面有一些我觉得想做一个好的插 ...

  3. 动手自己写一个 xcode 插件(Xcode Source Editor Extensions)附源码

    2019独角兽企业重金招聘Python工程师标准>>> 动手自己写一个 xcode插件  (暂时需要注释功能,所以简单的写一个注释插件) -----Xcode Source Edit ...

  4. 自己动手写一个印钞机 第二章

    2019独角兽企业重金招聘Python工程师标准>>> 作者:阿布? 未经本人允许禁止转载 ipython notebook git版本 目录章节地址: 自己动手写一个印钞机 第一章 ...

  5. 实现你人生中的第一个jQuery插件

    前言 本想把本篇取名:从0开始写前端UI框架:实现你人生中的第一个jQuery插件 ,但感觉标题太长,所以简单明了直接取后面主题为题目吧. 前一篇文章 已经对my-ui框架做了简单的介绍.谈到了我是如 ...

  6. 自己动手写一个印钞机 第四章

    2019独角兽企业重金招聘Python工程师标准>>> 作者:阿布? 未经本人允许禁止转载 ipython notebook git版本 目录章节地址: 自己动手写一个印钞机 第一章 ...

  7. body区域怎么传一个数组_自己轻松写一个jQuery库

    jQuery是现在最流行的JavaScript工具库. 据统计,目前全世界57.3%的网站使用它.也就是说,10个网站里面,有6个使用jQuery.如果只考察使用工具库的网站,这个比例就会上升到惊人的 ...

  8. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  9. 自己动手写一个简单的bootloader

    自己动手写一个简单的bootloader 15年10月31日19:44:27 (一) start.S 写这一段代码前,先要清楚bootloader开始的时候都做什么了.无非就是硬件的初始化,我们想要写 ...

最新文章

  1. 从SAE又回到BAE,感觉好轻松
  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型
  3. Filter过滤器拦截路径配置
  4. Android 性能优化案例
  5. mac系统csv转ansi_迅捷文字转语音 for mac
  6. WebService的知识总结(一)
  7. JS 字符串变量全局替换
  8. 全国大学生智能汽车竞赛 --图像处理上位机篇开源了
  9. 谷歌浏览器怎么开启硬件加速模式 硬件加速模式开启方法简述
  10. Oracle转换Postgres
  11. 网络基础-应用层:E-mail应用:SMTP协议,POP协议,IMAP协议
  12. 参数校验@Valid
  13. 免费图片转pdf的方法?学会图片转pdf很重要
  14. 太魔人招新|快来加入我们吧~
  15. jquery遍历节点的方法
  16. Hello‘s P2P—一个普通程序出生入死的一生
  17. 第三十四章 数论——高斯消元解线性方程组
  18. 出入口安装摄像机产生的逆光现象的…
  19. 以ofo为代表的共享经济退烧后,风投目光转向了芯片!
  20. 《高级无线网络—4G技术》——1.4 绿色无线网络

热门文章

  1. Cloudinit简介
  2. centos下安装python3详细教程
  3. 霸屏纽约时代广场 Rela热拉新女性对话真我觉知当下
  4. Linux下如何回到根目录
  5. 三八妇女节即将到来,跨境电商如何玩转节日营销?
  6. python标识符命名规则
  7. EPALN 安装板布局之出现‘延伸和扩展’对话框
  8. 我与传智播客的不解之缘
  9. 图书管理系统(Java实现)[附完整代码]
  10. EasyExcel——采用自定义拦截器设置单元格列宽