原文:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401571467&idx=1&sn=08cb00963e6efd3881d3397903e84752&scene=1&srcid=0125cT8n9FJMI1u2faaQgjcS&from=singlemessage&isappinstalled=0#wechat_redirect


英文原文链接:http://www.queness.com/post/112/a-really-simple-jquery-plugin-tutorial

1,简介

对于jquery初学者来说,制作一个jquery插件还是一个比较高级的话题。最近一个月一致在倒腾jquery。因此学些了怎么把javascript代码从html文件中分离出来,对于现在所写的代码并不满意。因此,我决定去深入了解如何做一个jquery插件来使得javascript文件更加的简洁。

本文中制作的插件是基于我上一次的教程:Navigation List menu + jQuery Animate Effect Tutorial(http://www.queness.com/post/68/navigation-list-menujquery-animate-effect-tutorial)改教程中我把所有的js代码都放到了document.ready回调函数中,就像这样:


但是这一次,代码是这样的:

它看起来简洁多了,而且也容易复用到别的项目当中。

2.插件结构

关于制作jquery插件,jquery官网提供了一份非常详细的说明文档。但是,我觉得它实在是太难理解了。

为了是我们的编程生活更美好一些,简单一些,我在线研究了相关的文档。下买呢的这段代码是一段优雅的jquery插件结构。

    1. //You need an anonymous function to wrap around your function to avoid conflict

    2. 匿名包裹函数,避免了全局变量

    3. (function($){

    4. //Attach this new method to jQuery

    5. $.fn.extend({

    6. //This is where you write your plugin's name

    7. // jquery插件名称

    8. pluginname: function() {

    9. //Iterate over the current set of matched elements

// 迭代选择器选中的dom元素

    1. return this.each(function() {

    2. //code to be inserted here

// jquery插件的代码

  1. });

  2. }

  3. });

  4. //pass jQuery to the function,

  5. //So that we will able to use any valid Javascript variable name

  6. //to replace "$" SIGN. But, we'll stick to $ (I like dollar sign: ) )

  7. })(jQuery);

3. Plugin With Options

如果你看过了第一部分的简介,padding值是可配置的。让用户根据自己的业务需求传递一些参数给插件是很有必要的。保证每一个变量都有一个默认值是一个良好的编程实践。现在,你需要下面的这段代码:

  1. (function($){

  2. $.fn.extend({

  3. //pass the options variable to the function

  4. pluginname: function(options) {

  5. //Set the default values, use comma to separate the settings, example:

  6. var defaults = {

  7. padding: 20,

  8. mouseOverColor : '#000000',

  9. mouseOutColor : '#ffffff'

  10. }

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

  12. return this.each(function() {

  13. var o = options;

  14. //code to be inserted here

  15. //you can access the value like this

  16. alert(o.padding);

  17. });

  18. }

  19. });

  20. })(jQuery);

4. The animateMenu Plugin

现在您已经知道了jquery插件的基本结构。接下来的这个插件就是基于我之前的一个教程。它接收4个参数:

  • animatePadding : Set the padding value for the animate effect

  • defaultPadding : Set the default padding value

  • evenColor : Set the color this color if index value is even number

  • oddColor : Set the color this color if index value is odd numbe

  1. (function($){

  2. $.fn.extend({

  3. //plugin name - animatemenu

  4. animateMenu: function(options) {

  5. //Settings list and the default values

  6. var defaults = {

  7. animatePadding: 60,

  8. defaultPadding: 10,

  9. evenColor: '#ccc',

  10. oddColor: '#eee'

  11. };

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

  13. return this.each(function() {

  14. var o =options;

  15. //Assign current element to variable, in this case is UL element

  16. var obj = $(this);

  17. //Get all LI in the UL

  18. var items = $("li", obj);

  19. //Change the color according to odd and even rows

  20. $("li:even", obj).css('background-color', o.evenColor);

  21. $("li:odd", obj).css('background-color', o.oddColor);

  22. //Attach mouseover and mouseout event to the LI

  23. items.mouseover(function() {

  24. $(this).animate({paddingLeft: o.animatePadding}, 300);

  25. }).mouseout(function() {

  26. $(this).animate({paddingLeft: o.defaultPadding}, 300);

  27. });

  28. });

  29. }

  30. });

  31. })(jQuery);

译者注:对于web前端从业者来说,使用jquery插件自然可以提升我们的开发效率。但是我们不仅是要知其然也要知其所以然。不仅要做到会使用,也要知道其实现原理。一方面看一些业内优秀的jquery插件的源代码可以有效的提升我们的编码能力;另一方面,掌握了编写jquery插件的方法,可以把我们项目中常用的组件通过这种方式写成jquery插件,便于代码的复用,使代码更加的简洁和可维护。译者也是一个前端小沫沫,从业时间也不长,文中如果有不对的地方,还望指出,不胜感激。

注:感兴趣的可以关注笔者微信公众号,每周推送一篇前端干货

制作一个简洁的jquery插件的更多相关文章

  1. 【前端】制作一个handlebars的jQuery插件

    (function($) { var compiled = {}; $.fn.handlebars = function($srcNode, data) { // 取出模版内容 var src = $ ...

  2. Swift 制作一个新闻通知中心插件1

    使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...

  3. 推荐一个内容滚动jquery插件

    myslider是一个内容滚动jquery插件,版本0.1.2的每次滚动内容是一行内容,可以是文字,可以是一个链接,还可以是图片. 官方网址:http://keleyi.com/jq/myslider ...

  4. 编写一个简单的Jquery插件

    1.实现内容 定义一个简单的jquery插件,alert传递进来的参数 2.插件js文件(jquery.showplugin.js) (function ($) { //定义插件中的方法 var me ...

  5. 手把手制作一个简单的IDEA插件(环境搭建Demo篇)

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...

  6. 使用 Swift 制作一个新闻通知中心插件(1)

    input[type="date"].form-control,.input-group-sm>input[type="date"].input-grou ...

  7. How to Create a Basic Plugin 如何写一个基础的jQuery插件

    How to Create a Basic Plugin Sometimes you want to make a piece of functionality available throughou ...

  8. 使用 Swift 制作一个新闻通知中心插件(2)

    我们在第一部分的文章中详细讲解了创建一个通知中心插件的整体过程.我们成功的在通知中心里面显示了新闻列表.但是截止到目前,我们还不能从通知中心的列表中查看新闻的详细内容.在这次的教程中,我们就以上次的教 ...

  9. 学了一个封装的jquery插件,感觉还成

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

随机推荐

  1. MySQL服务 - MySQL列类型、SQL模式、数据字典

    MySQL列类型的作用: 列类型可以简单理解为用来对用户往列种存储数据时做某种范围"限定",它可以定义数据的有效值(字符.数字等).所能占据的最大存储空间.字符长度(定长或变长). ...

  2. 在Eclipse中使用JUnit4进行单元测试(高级篇)

    通过前2篇文章,您一定对JUnit有了一个基本的了解,下面我们来探讨一下JUnit4中一些高级特性. 一.高级Fixture 上一篇文章中我们介绍了两个Fixture标注,分别是@Before和@Af ...

  3. 使用jedis操作redis

    一 连通性 1. 简单代码测试连通性 Jedis jedis = new Jedis(".......", 6379); String keys = "name" ...

  4. SQL 常用的命令 (转)

    地址:http://www.cnblogs.com/longly/p/6030609.html 设置SQL语句所用的字符编码:set names UTF8; 判断指定的数据库是否存在:DROP DAT ...

  5. CentOS下安装Tomcat7

    1.检查java版本信息 #java -version java version "1.7.0_65" OpenJDK Runtime Environment (rhel-2.5. ...

  6. go 版本 gRPC 环境搭建(3.0正式版)

    之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下:   安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...

  7. 【原创】ORACLE常见使用问题解决

    ORACLE常见使用问题解决 一.安装了oracle客户端后,发现plsql客户端找不到之前已经配置过的TNS连接信息 或许大家再使用ORACLE软件的过程中,经常会遇到这样的问题: 问题现象描述: ...

  8. Ejabberd作为推送服务的优化手段

    AVOS Cloud目前还在用Ejabberd做Android的消息推送服务.当时选择Ejabberd,是因为Ejabberd是一个发展很长时间的XMPP实现,并且基于Erlang,设想能在我们自主研 ...

  9. Windows动态库学习心得

    最近在工作中需要给项目组其他成员提供调用函数,决心抛弃以前“拷贝头文件/源文件”的简陋方法,采用动态库的方式对自己开发的接口进行模块化管理.因之前一直没有机会从事Windows动态库的开发,现借助这个 ...

  10. SDRAM控制器的Verilog建模之一

    前言:作为经典存储器的三剑客中的flash和sram已经建模测试过了,虽然现在都已经ddr2,ddr3,667MHZ.1333MHZ的天下了,但是接下这周来准备写一下sdram的controller. ...