1.Hold住,我们要开始动真格了!

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

2.第一个版本

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

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

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

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

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

3.第二个版本

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

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

首先我们看看$.fn.superLight.defaults,我们在superLight中增加了一个默认的属性,这个默认的属性提供了两个参数,color和duration,这个是为我们提供默认值而设置的.然后我们看下一行的代码,
options = $.extend($.fn.superLight.defaults,options);

这句话是什么意思呢.如果你看了上面那篇关于extend的文章,你就会知道,这个其实是起到了合并的作用,如果你提供了一个options参数,那么它将会覆盖掉原来的默认值,如果没有提供的话,就使用我们默认提供的那个.这样做的好处就是能更好的管理我们的参数.客户也可以自由的去选择需要,让我们试试看效果

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

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

4.第三个版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(function($){$.fn.superLight = function(options) {$.fn.superLight.defaults = {'color':'#fff47f', 'duration':'fast','complete':null  };options = $.extend($.fn.superLight.defaults,options);$.isFunction(options.complete)||(options.complete = null);return this.each(function() {$(this).data('orginColor',$(this).css('backgroundColor')).css('backgroundColor',options.color).one('mouseover',function() {$(this).animate({backgroundColor:$(this).data('orginColor')},options.duration,options.complete);})})}
})(jQuery)
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上下文绑定在这上面.这是要需要注意的地方,这样,我们的这个插件大概就写好了.

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

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

    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. JAVA:控制台输入问题
  2. poj 2247 Humble Numbers
  3. MySQL具体解释(21)------------缓存參数优化
  4. 随机加密_随机艺术和加密圣诞树
  5. 辞去美国终身教职!顶尖学者,加盟“双一流”高校
  6. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组...
  7. citrix4.5无法进入发布程序界面The supplied credentials could not be validated
  8. python合并大量ts文件_Python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频
  9. 三极管放大电路基础知识
  10. 几何分布的期望和方差公式推导_常用概率分布总结(1)
  11. 简易一键分享到QQ空间
  12. MySQL用户权限系统
  13. 【第十六篇】Flowable事件之结束事件
  14. 关于“硬解码”与“软解码”
  15. 《完美幻灯片设计的黄金法则》
  16. k8s存储+storageclass自动创建pv+StatefulSet自动创建pvc
  17. 软件面试常见题目(转帖)
  18. Flutter安卓系统把状态栏设置为透明色
  19. 云原生周报 | 入门级KCNA认证即将推出,BFE Ingress Controller 正式发布
  20. el-upload在表单循环中,实现选择,删除,拖拽,并且和表单数组对上

热门文章

  1. [APB VNext 笔记] UI
  2. 前端(jQuery)(5)-- jQuery AJAX异步访问和加载片段
  3. 一元操作符和使用Number()方法的区别
  4. File-nodejs
  5. IOS学习笔记(四)之UITextField和UITextView控件学习
  6. 群体结构分析软件Structure使用步骤
  7. 会声会影导出视频为原视频分辨率(没有黑边的技巧)
  8. python需要音语基础_英语基础一般,如何才能学习C语言编程和Python
  9. 云盘存储 教学反思_对设计训练的设计:以建筑工房工作模型课题的教学实验为例对设计训练方法论的反思...
  10. java获取id值_从另一页获取ID值[重复]