你的专属定制——JQuery自定义插件

    前  言

絮叨絮叨

  jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

  那么这次,我就和大家来分享一下JQuery中的一个强大的功能——自定义插件。当我们在去实现一个小功能的时候,比如说banner图的滚动,插件的使用会让我们省去大量的代码。那又当我们会经常使用一个功能然而又懒得每次都去写怎么办?那当然就需要我们自己写一个属于自己的插件,用的时候直接拿我们自定义的插件用就可以了。

   JQuery插件类型

广义上分为三类:实例对象方法插件 、全局函数插件 、选择器插件

1实例对象插件

开发能让所有的jquery实例对象都可以调用的方法。也就是说,只要通过$()获得 的jquery实例对象,都可以调用我们开发的方法。

本质上来说,是一个对象级别的插件,这类插件首先通过jQuery选择器获取对象,并为对象添加方法,然后,将方法进行打包,封闭成一个插件,这种类型的插件编写简单,极易调用,也很方便地使用了jQuery中功能强大的选择器

例如:

$.fn.setBgColor = function(bgColor){
    //在$.fn声明的插件函数中,可以使用this代指调用这个插件的对象节点。
    //而且this是一个JQUery对象
    bgColor = bgColor? bgColor:"#ccc";   //设置背景色的默认值
    this.css("background-color",bgColor);
}
$("#div1").setBgColor("red");

2全局函数插件

可以将独立的函数添加到jQuery命名空间中了。那么调用的时候就可以使用 $.函数名称() 或者jQuery.函数名称()来调用了。可以理解为静态方法。
全局函数插件是一个类级别的插件,这类插件最大的特点,就是可以直接给jQuery添加静态方法,并且可以将函数置于jQuery命名空间中.

例如:

$.extend({
    func : function(){}     //func --> 插件名
 });
    JQuery自定义插件要点

1 .插件的文件命名必须严格遵循jQuery.[插件名].js的规则,以便于与其他js文件的区
  分,如插件名

2. 如果是对象级别插件,所有的方法都应依附于jQuery.fn主体对象,如果是类级别插件,所有的方法都应依附干jQuery对象
     

  因此在编写对象级别的插件时,使用jQuery.fn.extend()方法进行功能扩展;而针对类级别的插件,则使用jQuery.extend()方法进行扩展

3. 无论是对象级别还是类级别插件,结尾都必须以分号结束,否则,在文件被压缩时,会出现错误提示信息
  
4. 在插件内部的代码中,如果要访问每个元素,可以使用this.each方法来遍历全部元素

5. 需要说明的是在插件的内部,this所代表的是通过jQuery选择器所获取的对象,而非传统意义上的对象的引用

6. 由jQuery代码在调用方法时,可以采用链写的方法同时调用多个方法,因此,为了保证这个功能的实现,插件本身必须返回一个JQueryl对象

7. 虽然“$’‘符号,可以与jQuery字符相代替,但在编写插件的代码中,尽量不要使用“$”符号,以避免与别的代码冲突 

  为方便使用,也可以用一个自执行函数包裹所有代码,在自执行函数中传入一个形参“$”符号,再传入一个实参JQuery,这样就可以放心大胆的使用“$”符号,而不用担心与别的代码发生冲突

    banner图的滚动实例

html代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>自定义插件实现banner滚动</title>
        <script src="js/jquery-3.1.1.js" type="text/javascript"></script>      <!--导入JQuery-->
        <script src="js/jquery.scrollBanner.js" type="text/javascript"></script>     <!--导入自定义插件  “jquery.scrollBanner.js”-->
    </head>
    <body>

        <div id="banner">

        </div>

        <script type="text/javascript">
            $("#banner").scrollBanner({
                images : [  {src:"img/banner11.png",title:"banner1",href:"http://www.baidu.com"},
                            {src:"img/banner22.png",title:"banner2",href:"http://www.sina.com"},
                            {src:"img/banner33.png",title:"banner3",href:"http://www.qq.com"},
                            {src:"img/banner44.png",title:"banner4",href:"http://www.zealer.com"},
                         ]
            });
        </script>
    </body>
</html>

自定义插件代码

/* 该插件实现了Banner图的滚动效果。
 *
 * 一、插件的属性:
 * images : 接受数组类型,数组的每个值应为对象。对象具有属性: src->图片的路径 title->图片指上后的文字   href->点击图片跳转的页面
 *
 * scrollTime : 每张图片的停留时间,单位毫秒。 2000
 * bannerHeight : Banner图的高度.  500px
 *
 * iconColor : 提示图标的颜色。默认 white
 * iconHoverColor : 提示图标指上之后的颜色。  默认 orange
 * iconPosition : 提示图标的位置,可选值left/center/right。 默认center
 *
 */
!function($){
    $.fn.scrollBanner = function(obj){
        // 声明各个属性的默认值
        var defaults = {
            images : [],
            scrollTime : 2000,
            bannerHeight : "500px",
            iconColor : "white",
            iconHoverColor : "black",
            iconPosition : "center",
        }
        // 将默认值与传入的对象比对,如果传入的对象有未赋值属性,则使用默认对象的属性
        obj = $.extend(defaults,obj);

     // 组建DOM布局
        $("body").css({"padding" : "0px","margin" : "0px",});

        this.empty().append("<div class=‘scrollBanner-banner‘></div>");
        $.each(obj.images,function(index,item){
            $(".scrollBanner-banner").append("<div class=‘scrollBanner-bannerInner‘><a href=‘"+item.href+"‘ target=‘_black‘><img src=‘"+item.src+"‘ title=‘"+item.title+"‘ /></a></div>");
        });
        $(".scrollBanner-banner").append("<div class=‘scrollBanner-bannerInner‘><a href=‘"+obj.images[0].href+"‘ target=‘_black‘><img src=‘"+obj.images[0].src+"‘ title=‘"+obj.images[0].title+"‘ /></a></div>");

        this.append("<div class=‘scrollBanner-icons‘></div>");
        $.each(obj.images,function(index,item){
            //data-* 属性是H5允许用户自行在HTML标签上保存数据的数据
            //保存在data-*中的数据,可以使用JS读取调用
            $(".scrollBanner-icons").append("<span class=‘scrollBanner-icon‘ data-index=‘"+index+"‘></span>");
        });

        //设置各种css
        this.css({
            "width" : "100%",
            "height" : obj.bannerHeight,
            "overflow" : "hidden",
            "position" : "relative",
        });

        $(".scrollBanner-banner").css({
            "width" : obj.images.length +1+"00%",
            "height" : obj.bannerHeight,

        });

        $(".scrollBanner-bannerInner").css({
            "width" : 100/(obj.images.length +1)+"%",
            "height" : obj.bannerHeight,
            "overflow" : "hidden",
            "float" : "left"
        });

        $(".scrollBanner-bannerInner img").css({
            "width" : "1920px",
            "height" : obj.bannerHeight,
            "position" : "relative",
            "left" : "50%",
            "margin-left" : "-960px",
        });

        $(".scrollBanner-icons").css({
            "width": 35*obj.images.length+"px",
            "height": "7px",
            "position" : "absolute",
            "bottom" : "40px",
//            "left" : "0px",
            "z-index": "100",
        });
        switch (obj.iconPosition){
            case "left":
                $(".scrollBanner-icons").css({
                    "left" : "40px",
                });
                break;
            case "right":
                $(".scrollBanner-icons").css({
                    "right" : "40px",
                });
                break;
            case "center":
                $(".scrollBanner-icons").css({
                    "left" : "50%",
                    "margin-left" : "-"+15*obj.images.length+"px",
                });
                break;
        }

        $(".scrollBanner-icon").css({
            "width": "20px",
            "height": "7px",
            "background-color": obj.iconColor,
            "display": "inline-block",
            "margin": "0px 5px",

        });
        $(".scrollBanner-icon:eq(0)").css({
            "background-color":obj.iconHoverColor,
        });

        //实现Banner滚动功能
        var count = 1;
        var icons = $(".scrollBanner-icon");
        setInterval(function(){

            $(".scrollBanner-banner").css({
                "margin-left" : "-"+count+"00%",
                "transition" : "all .5s ease",
            });
            $(".scrollBanner-icon").css("background-color",obj.iconColor);
            $(".scrollBanner-icon:eq("+count+")").css("background-color",obj.iconHoverColor);

            if(count>=obj.images.length) $(".scrollBanner-icon:eq("+0+")").css("background-color",obj.iconHoverColor);

            if(count>obj.images.length){

                count = 0;
                $(".scrollBanner-banner").css({
                    "margin-left" : "0px",
                    "transition" : "none",
                });
            }
            count++;
        },obj.scrollTime);

        //小图标指上以后变色并且切换banner图
        $(".scrollBanner-icon").mouseover(function(){
            $(".scrollBanner-icon").css("background-color",obj.iconColor);
            //↓由span触发mouseover事件,则this指向这个span。
            //↓但是,这this是JS对象,必须使用$封装成JQuery对象。
            $(this).css("background-color",obj.iconHoverColor);
//            console.log($(this).attr("data-index"));
            var index = $(this).attr("data-index");
            count = index;//将计数器count修改为index的值,让banner滚动的定时器能够刚好滚到所指图片的下一张。
            $(".scrollBanner-banner").css({
                "transition" : "none",
                "margin-left" : "-"+index+"00%",

            });
        });

    }

}(jQuery);

效果图如下:

时间: 2024-11-18 00:13:22

你的专属定制——JQuery自定义插件的相关文章

jquery自定义插件——window的实现

本例子实现弹窗的效果: 1.jquery.show.js /* * 开发者:lzugis * 开发时间:2014年6月10日 * 实现功能:点击在鼠标位置显示div * 版本序号:1.0 */ (function($){ $.fn.showDIV = function(options){ var defaults = {}; var options = $.extend(defaults, options); var showdiv=$(this); var close, title, cont

代码:jquery自定义插件 demo

jquery自定义插件 demo 2016-1-13 只是一个简易的示例 <script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $.fn.portamento = function

jQuery自定义插件--banner图滚动

前言 jQuery是一个功能强大的库,提供了开发JavaScript项目所需的所有核心函数.很多时候我们使用jQuery的原因就是因为其使用插件的功能,然而,有时候我们还是需要使用自定义代码来扩展这些核心函数来提高开发效率.我们知道, jQuery库是为了加快JavaScript的开发速度而设计的,通过简化编写JavaScript的方式,减少代码量.所以,今天就带大家了解一下jQuery自定义插件以及自定义插件案例---banner图滚动. 一.自定义插件 自定义插件一般有两种类型:全局插件和局

深入学习jQuery自定义插件

原文地址:jQuery自定义插件学习 1.定义插件的方法 对象级别的插件扩展,即为jQuery类的实例增加方法, 调用:$(选择器).函数名(参数);      $(‘#id’).myPlugin(options); 定义的方式: $.fn.extend({ "函数名":function(自定义参数){ //这里写插件代码 } }); //或者是 $.fn.函数名 = function(options){ //这里写插件代码 } 类级别的方法,就是扩展jQuery类本身的方法,为它增加

黑马day18 JQuery自定义插件

说明:使用JQuery中的JQuery.extend({//这里是json格式的数据});可以定义一个全局函数 使用JQuery中的JQuery.fn.extend({//这里是json格式的数据});可以定义一个局部函数 1.定义全局函数(来判断两个输入的数字的最大值和最小值) test.html <!DOCTYPE html> <html> <head> <title>test.html</title> <meta http-equiv

jquery自定义插件-参数化配置多级菜单导航栏插件

1 自定义菜单导航栏插件的必要性 看图说话,下面是利用自定义的菜单导航栏插件simpleMenu创建的网站导航示例: 插件默认提供的是如上图的导航栏样式,即一二级菜单为横向分布:三四级菜单为纵向分布. 使用插件时,可以修改默认参数,目前插件提供了设置菜单的分布方式:横向或纵向:菜单的位置:依赖上一级菜单栏的定位:上下左右定位. 修改调用参数,将一二级菜单改为纵向排列:并将三级菜单的显示位置改为二级菜单栏的右侧(其他的和默认保持一致),修改后运行效果如下图: 细心的观察,会发现上面两个菜单导航栏的

Jquery自定义插件

$.fn.extend是一个实例的扩展,但是$.extend是类的扩展 <script type="text/javascript"> (function($){ $.fn.extend({ myPlugName:function(){ $(this).click(function(){ alert($(this).val()); }); } }); })(jQuery); </script> <body> <input type="

jquery自定义插件实现分页效果

这节介绍如何自定义jquery插件,实现分页效果,话不多说,先看看实现的效果: 分页插件 实现的代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta charset="utf-8"> <title>page t

jquery自定义插件来实现分页的效果

本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta charset="utf-8"> <title>p