jQuery插件

13 篇文章 0 订阅
12 篇文章 0 订阅

使用jQuery来封装的一个功能或特效。
jQuery插件的引入必须要放到jQuery库文件的下面,不然jQuery插件无法生效。道理很简单,因为jQuery插件就是使用jQuery的语法来编写的。

文本溢出:dotdotdot.js

想要实现“多行文本”的省略号效果,可以使dotdotdot.js这个jQuery插件来实现。

  <script src="js/jquery-1.12.4.min.js"></script>
    <script src="js/jquery.dotdotdot.js"></script>
    <script>
        $(function(){
            $("div").dotdotdot();
        })
    </script>

dotdotdot.js的使用方法非常简单:首先为元素定义一个宽度和高度,然后针对该元素使用dotdotdot()这个方法就可以了。当内容超出元素时,就会以省略号的形式来显示。

延迟加载:lazyload.js

lazyload.js这个插件实现图片的延迟加载,也就是只有把滚动条拉到相应的位置,此处的图片才会显示出来,否则不会显示出来。
① 引入jQuery库和lazyload.js,如下所示:

<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/jquery.lazyload.min.js"></script>

② 图片的src用data-origin代替,如下所示:

<img class="lazy" data-original="img/haizei1.png" alt="">

③ 添加jQuery代码,如下所示:

$().lazyload({
    effect: "fadeIn"
});

例如:

 <script src="js/jquery-1.12.4.min.js"></script>
    <script src="js/jquery.lazyload.min.js"></script>
    <script>
        $(function(){
            $("img").lazyload({
                effect: "fadeIn"
            });
        })
    </script>
<div></div>
    <img data-original="img/haizei1.png" alt="">
    <img data-original="img/haizei2.png" alt="">

例子中,还没拖动滚动条的时候,图片是没有加载的,因为没有src属性。
当我们拖动滚动条到底部,也就是让图片进入“可视”范围内时,lazyload就会自动为图片添加src属性,此时图片会以渐入的形式显示出来。控制台中img会出现src属性。

复制粘贴:zclip.js

jQuery中,我们可以使用zclip.js插件来实现页面文本的复制粘贴,只需要两步就可以了。
① 引入jQuery库和zclip.js,如下所示:

<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/jquery.zclip.min.js"></script>

② 添加jQuery代码,如下所示:

<script src="js/jquery-1.12.4.min.js"></script>
    <script src="js/jquery.zclip.min.js"></script>
    <script>
        $(function(){
            $("#btn").zclip({
                path: "js/ZeroClipboard.swf",
                copy: function () {
                    return $("#txt").val()
                },
                afterCopy: function () {
                    alert("复制成功")
                }
            })
        })
    </script>

zclip.js插件是借助Flash来实现复制的,因此我们需要使用path参数引入相应的Flash文件地址。此外,zclip.js是依赖于服务器环境的,如果仅仅是使用本地环境,是没有效果的。

表单验证:validate.js

① 引入jQuery库、validate.js以及message_zh.js,如下所示:

<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/jquery.validate.min.js"></script>
<script src="js/jquery.message_zh.min.js"></script>

② 添加jQuery代码,如下所示

<script src="js/jquery-1.12.4.min.js"></script>
    <script src="js/jquery.validate.min.js"></script>
    <script src="js/message_zh.min.js"></script>
    <script>
        $(function(){
            $("#myform").validate({
                //自定义验证规则
                rules:{
                    myname:{required:true,maxlength:6},
                    myemail:{required:true,email:true}
                }
            })
        })
    </script>

myname:{required:true,maxlength:6}表示id="myname"这个文本框是一个必填的,并且最大长度为6个字符。
myemail:{required:true,email:true}表示id="myemail"这个文本框是必填的,并且启动email验证规则。
validate.js插件https://plugins.jquery.com/validate/

自定义jQuery插件

(1)方法类插件
(2)函数类插件
(3)选择器插件

对于选择器插件,很少人会去开发使用,因为jQuery内置的选择器已经足够完善了,所以这一节我只会学习方法类插件和函数类插件。

一、方法类插件

可以使用$.fn.extend()方法来定义一个方法类插件。方法类插件,说白了就是:首先你使用了jQuery选择器来获取一个jQuery对象,然后针对你获取的这个jQuery对象添加一个方法。

(function($){
    $.fn.extend({
        "插件名": function(参数){
            ……
        }
    });
})(jQuery);

(function(){})()是JavaScript立即执行函数,这种用法在实际开发中经常用到。

(function(){
            $.fn.extend({
                //插件名为“changeColor”,有两个参数:fgcolor、bgcolor
                "changeColor":function(fgcolor,bgcolor){
                    //定义鼠标移入移出效果
                    $(this).mouseover(function () {
                        $(this).css({"color":fgcolor,"background":bgcolor});
                    }).mouseout(function () {  
                        $(this).css({"color":"black","background":"white"});
                    });
                    //返回jQuery对象,以便链式调用
                    return $(this);
                }
            })
        })(jQuery);

其中,fgcolor是“字体颜色”,bgcolor是“背景颜色”
在插件的最后,我们还需要使用return $(this)返回当前的jQuery对象,从而保持链式调用的功能。

如果参数比较多的话,我们应该定义一个参数对象option,然后把需要传给插件的参数一股脑儿都放在参数对象中就可以了,优化后的代码如下:

(function(){
            $.fn.extend({
                "color":function(options){
                    $(this).mouseover(function () {
                        $(this).css({"color":options.fgcolor,"background":options.bgcolor});
                    }).mouseout(function () {  
                        $(this).css({"color":"black","background":"white"});
                    });
                    return $(this);
                }
            })
        })(jQuery);


//调用插件
 $("h1").color({ fgcolor: "red", bgcolor: "#F1F1F1" });

例:设置参数的默认值

 //定义插件
        (function(){
            $.fn.extend({
                "color":function(options){
                    //设置参数的默认值
                    var defaults = {
                        fgcolor: "hotpink",
                        bgcolor: "lightskyblue"
                    };
                    var options = $.extend(defaults, options);
                    $(this).mouseover(function () {
                        $(this).css({"color":options.fgcolor,"background":options.bgcolor});
                    }).mouseout(function () {  
                        $(this).css({"color":"black","background":"white"});
                    });
                    return $(this);
                }
            })
        })(jQuery);
//调用插件
            $("h1").color();

要设置参数的默认值,我们需要在插件内部另外定义一个选项对象,然后使用.extend(),来将参数对象options和选项对象defaults合并成一个对象。.extend()方法允许你使用一个或多个对象来扩展一个基准对象,扩展的方式是依序将右边的对象合并到基准对象(也就是左边第一个对象)。

封装多个插件

如果想要同时封装多个jQuery插件,我们可以采用以下的语法:

(function($){
    $.fn.extend({
        "插件1": function(参数){
            ……
        },
        "插件2": function(参数){
            ……
        },
        "插件3": function(参数){
            ……
        }
    });
})(jQuery);

二、函数类插件

实际上,“工具函数”跟“函数类插件”说白了就是一个玩意函数类插件的语法跟方法类插件的差不多,仅仅是把.fn.extend()换成.extend()就可以了

(function($){
    $.extend({
        "插件名": function(){
            ……
        }
    });
})(jQuery)
 (function($){
            $.extend({
                "maxNum": function(m, n){
                    return (m>n)?m:n;
                }
            });
        })(jQuery)
        $(function () {
            var result=$.maxNum(10, 5)
            console.log("最大值是:"+result);
        })

方法类与函数类,两者最大的不同在于:函数类插件是在全局对象下定义一个方法,而方法类插件是在所获取的jQuery对象下定义一个方法。
方法类插件可以使用jQuery中功能强大的选择器,调用方式一般是:

$(选择器).插件名()

而函数类插件不可以使用jQuery选择器,其调用方式一般是:

$.函数名()

在实际开发中,我们所说的jQuery插件一般指的是方法类插件

总结

一下jQuery插件,有以下几点是比较重要的。
• (1)插件的文件命名必须严格按照jquery.[插件名].js或jquery.[插件名].min.js的格式。
• (2)在插件的最后必须使用return $(this)来返回当前jQuery对象,以便保持链式调用的功能。
• (3)无论是哪一种插件,定义的结尾都必须以分号结束,否则文件被压缩后,可能会出现错误。
• (4)方法类插件使用的是$.fn.extend(),而函数类插件使用的是$.extend()。我们常说的jQuery插件,指的都是方法类插件。
• (5)$.extend()是在jQuery全局对象上扩展一个方法,而$.fn.extend()是在选择器上扩展一个方法。因此定义工具函数应该用$.extend(),而定义jQuery插件应该用$.fn.extend()

问答题

  1. 在jQuery中,.extend().fn.extend()这两个方法之间有什么区别?
    方法类插件使用的是$.fn.extend(),而函数类插件使用的是$.extend()
    $.extend()是在jQuery全局对象上扩展一个方法,而$.fn.extend()是在选择器上扩展一个方法。因此定义工具函数应该用$.extend(),而定义jQuery插件应该用$.fn.extend()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值