查看: 1723|回复: 9
打印 上一主题 下一主题

[经验分享] Plug me:制作自己的插件

[复制链接]
   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-1-13 09:54:09 |只看该作者 |倒序浏览
Plug me:制作自己的插件
写一个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件.

    为你的插件取一个名字,在这个例子里面我们叫它"foobar".
    创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js
    创建一个或更多的插件方法,使用继承jQuery对象的方式,如:
   
jQuery.fn.foobar = function() {
        // do something
};
   
    可选的:创建一个用于帮助说明的函数,如:
   
jQuery.fooBar = {
        height: 5,
        calculateBar = function() { ... },
        checkDependencies = function() { ... }
};
    你现在可以在你的插件中使用这些帮助函数了:
   
jQuery.fn.foobar = function() {
        // do something
        jQuery.foobar.checkDependencies(value);
        // do something else
};
   
    可选的l:创建一个默认的初始参数配置,这些配置也可以由用户自行设定,如:
   
jQuery.fn.foobar = function(options) {
        var settings = {
                value: 5,
                name: "pete",
                bar: 655
        };
        if(options) {
                jQuery.extend(settings, options);
        }
};
    现在可以无需做任何配置地使用插件了,默认的参数在此时生效:
   
$("...").foobar();
    或者加入这些参数定义:
   
$("...").foobar({
        value: 123,
        bar: 9
});
   

如果你release你的插件, 你还应该提供一些例子和文档,大部分的插件都具备这些良好的参考文档.
现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自己的插件.
很多人试着控制所有的radio或者checkbox是否被选中,比如:

$("input[type='checkbox']").each(function() {
        this.checked = true;
        // or, to uncheck
        this.checked = false;
        // or, to toggle
        this.checked = !this.checked;
});
注:在jQuery1.2及以上版本中,选择所有checkbox应该使用 input:checkbox , 因此以上代码第一行可写为:

$('input:checkbox').each(function() {
无论何时候,当你的代码出现each时,你应该重写上面的代码来构造一个插件,很直接地:

$.fn.check = function() {
        return this.each(function() {
                this.checked = true;
        });
};
这个插件现在可以这样用:

$('input:checkbox').check();

注:在jQuery1.2及以上版本中,选择所有checkbox应该使用 input:checkbox 原文为:$("input[type='checkbox']").check();
现在你应该还可以写出uncheck()和toggleCheck()了.但是先停一下,让我们的插件接收一些参数.

$.fn.check = function(mode) {
        var mode = mode || 'on'; // if mode is undefined, use 'on' as default
        return this.each(function() {
                switch(mode) {
                case 'on':
                        this.checked = true;
                        break;
                case 'off':
                        this.checked = false;
                        break;
                case 'toggle':
                        this.checked = !this.checked;
                        break;
                }
        });
};
这里我们设置了默认的参数,所以将"on"参数省略也是可以的,当然也可以加上"on","off", 或 "toggle",如:

$("input[type='checkbox']").check();
$("input[type='checkbox']").check('on');
$("input[type='checkbox']").check('off');
$("input[type='checkbox']").check('toggle');
如果有多于一个的参数设置会稍稍有点复杂,在使用时如果只想设置第二个参数,则要在第一个参数位置写入null.
从上一章的tablesorter插件用法我们可以看到,既可以省略所有参数来使用或者通过一个 key/value 对来重新设置每个参数.
作为一个练习,你可以试着将 第四章 的功能重写为一个插件.这个插件的骨架应该是像这样的:

$.fn.rateMe = function(options) {
        var container = this; // instead of selecting a static container with $("#rating"), we now use the jQuery context

        var settings = {
                url: "rate.php"
                // put more defaults here
                // remember to put a comma (",") after each pair, but not after the last one!
        };

        if(options) { // check if options are present before extending the settings
                $.extend(settings, options);
        }

        // ...
        // rest of the code
        // ...

        return this; // if possible, return "this" to not break the chain
});
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-1-20 23:22:03 |只看该作者
年末来了,事情也多了!总结一年的经验,续写明年的计划!亲爱的朋友们,要注意身体,要开开心心的工作,健健康康的生活,舒舒服服的过年!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-2-22 23:29:23 |只看该作者
长了不少见识
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-3-8 23:24:04 |只看该作者
精典,学习了!
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-6-21 23:27:19 |只看该作者
“再次路过……”我造一个-----特别路过
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2012-7-11 23:22:59 |只看该作者
先垫一块,再说鸟
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2012-8-28 00:21:19 |只看该作者
都闪开,介个帖子,偶来顶
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2012-11-12 23:38:41 |只看该作者
你们都躲开,我来顶
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2012-11-29 23:27:14 |只看该作者
读铁系缘分,顶铁系友情
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2013-2-28 23:31:06 |只看该作者
好`我顶``顶顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-9-21 12:43 , Processed in 0.198618 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部