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

前言

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

一、自定义插件

自定义插件一般有两种类型:全局插件和局部插件;接下来,先了解一下这两种插件;

1、全局插件声明——为扩展jQuery类本身.为类添加新的方法。
    $.extend({
     func:function(){}  // func -->插件名
    });
   
    全局插件调用:
    $.func();

定义一个全局变量,其实就是在$.extend中定义对象里面的方法进行编译自己想要得到的功能插件,并留出想要的变量接口;

举个小例子:

JS:

<script type="text/javascript">
  $.extend({
      sayHello : function(){
          alert("hello!!");
      },
      say : function(message){
          alert("你说了:"+message);
      }
  });
      $.sayHello();
      $.say("hhahaha");
</script>

2、局部插件声明
    $.fn.func = function(){}
   
    局部插件调用
    $("选择器").func();

举个小例子:

JS:

<script type="text/javascript">
$.fn.setBgColor = function(bgColor){

                bgColor = bgColor?bgColor:"#ccc";  //设置默认值
                this.css("background-color",bgColor);
            }
            $("#div1").setBgColor("red");

            $.fn.setFont = function(obj){

                var defaults = {
                    "font-size" : "35px",
                    "font-weight" : "normal",
                    "font-family" : "宋体",
                    "color" : "#ccc"
                }
                //将默认值与传入的obj比对。并返回一个新对象。
                //如果obj里面有的属性,则使用obj属性。
                //如果obj没有声明的属性则使用默认值里面的属性
                var newObj =  $.extend(defaults, obj);

                this.css(newObj);

                //将调用当前函数的对象(this)返回,可以保证JQuery的链式语法
                return this;
            };3

            $("#div1").setFont({
                "font-size" : "20px",
                "font-weight" : "bold",
                "font-family" : "微软雅黑",
                "color" : "blue"
            });

        </script>

结果:

提醒:在上述的小例子中,在$.fn声明的插件函数中,可以使用this代指调用这个插件的的对象节点。
    而且,尤其要记住,this是一个JQuery对象,需要操作jQuery,千万不要用原生JS的DOM;

在上述的例子中,通过设置默认值来设置接口。通过调用插件,将所需设置的css样式设置在函数的odj中,并返回一个新对象从而实现功能;

二、自定义插件-banner图滚动

该插件实现banner滚动
 
 一、插件的属性:
 images:接受数组类型,数组的每个值应为对象。对象具有属性:src->图片的路径
 title->图片指上后的文字  href->图片指上后的跳转页面
 scrollTime:滚动时间,单位毫秒  5000
 bannerHeight:Banner图的高度
 
 iconColor:图片导航的颜色。默认white
 iconHoverColor:图片导航指上后的颜色。默认 orange
 iconPosition:图片导航的位置。可选left/right/center. 默认为center

1、小图标指上以后变色并且切换banner图

 通过:由span触发mouseover事件,则this指向这个span。
 但是,这this是JS对象,必须使用$封装成JQuery对象

 1 $(".scrollBanner-icon").mouseover(function(){
 2             $(".scrollBanner-icon").css("background-color",obj.iconColor);
 3             // 。
 5             $(this).css("background-color",obj.iconHoverColor);
 6
 7              var index = $(this).attr("data-index");
 8              //将计数器count修改为index的值,让banner图滚动的定时器能够刚好滚到所指图片的下一张
 9              count = index;
10             $(".scrollBanner-banner").css({
11                 "transition": "none",
12                 "margin-left":"-"+index+"00%"
13
14             });
15         });

效果:

3.2.1插件总代码

自定义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>
        <script src="JS/jquery-acrollBanner.js"type="text/javascript"></script>

    </head>
    <body>
        <div id="banner"></div>

<script type="text/javascript">
    $("#banner").scrollBanner({
        images :[
        {src:"插件/img/banner01.png",title:"banner1",href:"http://www.baidu.com"},
        {src:"插件/img/banner02.png",title:"banner2",href:"http://www.sina.com"},
        {src:"插件/img/banner03.png",title:"banner3",href:"http://www.baidu.com"},
        {src:"插件/img/banner04.png",title:"banner4",href:"http://www.baidu.com"},
                ]
            });
        </script>
    </body>
</html>

插件源码

  1 !function($){
  2     $.fn.scrollBanner = function(obj){
  3         // 声明各个属性的默认值,也就是设置插件可接收的接口
  4         var defaults = {
  5             images : [],
  6             scrollTime : 2000,
  7             bannerHeight : "500px",
  8             iconColor : "white",
  9             iconHoverColor : "orange",
 10             iconPosition : "center"
 11         }
 12         // 将默认值与传入的对象比对,如果传入的对象有未赋值属性,则使用默认对象的属性
 13         obj = $.extend(defaults,obj);
 14         console.log(obj);
 15         // 组件DOM布局
 16         $("body").css({"padding":"0px","margin" : "0px"});
 17
 18         this.empty().append("<div class=‘scrollBanner-banner‘></div>");
 19         $.each(obj.images,function(index,item){
 20             $(".scrollBanner-banner").append("<div class=‘scrollBanner-bannerInner‘><a href=‘"+item.href+"‘ target=‘_black‘><img src=‘"+item.src+"‘ title=‘"+item.title+"‘ /></a></div>");
 21         });
 22
 23         $(".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>");
 24
 25         this.append("<div class=‘scrollBanner-icons‘></div>");
 26         $.each(obj.images, function(index,item) {
 27             //data-*属性是H5允许用户自行在HTML标签上保存数据的属性。
 28             //保存在data-*中的数据,可以使用js读取调用
 29             $(".scrollBanner-icons").append("<span class=‘scrollBanner-icon‘ data-index =‘"+index+"‘></span>");
 30         });
 31         //设置css
 32         this.css({
 33             "width":"100%",
 34             "height":obj.bannerHeight,
 35             "overflow":"hidden",
 36             "position":"relative"
 37
 38         });
 39
 40         $(".scrollBanner-banner").css({
 41             "width":obj.images.length+1+"00%",
 42             "height":obj.bannerHeight,
 43             "transition": "all .5s ease"
 44         });
 45
 46         $(".scrollBanner-bannerInner").css({
 47             "width" : 100/(obj.images.length+1)+"%",
 48             "height":obj.bannerHeight,
 49             "overflow":"hidden",
 50             "float":"left"
 51         });
 52         $(".scrollBanner-bannerInner img").css({
 53                 "width": "1920px",
 54                  "height":obj.bannerHeight,
 55                  "position": "relative",
 56                    "left": "50%",
 57                    "margin-left": "-960px"
 58         });
 59
 60         $(".scrollBanner-icons").css({
 61             "position":"absolute",
 62             "z-index":"100",
 63             "width" :30*obj.images.length+"px",
 64             "bottom":"40px",
 65             "height":"7px"
 66         })
 67
 68         switch (obj.iconPosition){
 69             case "left":
 70                 $(".scrollBanner-icons").css({
 71                     "left":"40px",
 72                 });
 73                 break;
 74             case "right":
 75                 $(".scrollBanner-icons").css({
 76                     "right":"40px",
 77                 });
 78                 break;
 79             case "center":
 80                 $(".scrollBanner-icons").css({
 81                     "left":"50%",
 82                     "margin-left":"-"+15*obj.images.length+"px"
 83                 });
 84                 break;
 85             default:
 86                 break;
 87         }
 88
 89
 90         $(".scrollBanner-icon").css({
 91                 "width": "15px",
 92                  "height": "5px",
 93                  "background-color": obj.iconColor,
 94                  "display": "inline-block",
 95                  "margin": "0px 5px"
 96
 97
 98         })
 99
100         //小图标指上以后变色并且切换banner图
101         $(".scrollBanner-icon").mouseover(function(){
102             $(".scrollBanner-icon").css("background-color",obj.iconColor);
103             // ↓ 由span触发mouseover事件,则this指向这个span。
104             // ↓ 但是,这this是JS对象,必须使用$封装成JQuery对象。
105             $(this).css("background-color",obj.iconHoverColor);
106
107              var index = $(this).attr("data-index");
108              //将计数器count修改为index的值,让banner图滚动的定时器能够刚好滚到所指图片的下一张
109              count = index;
110             $(".scrollBanner-banner").css({
111                 "transition": "none",
112                 "margin-left":"-"+index+"00%"
113
114             });
115         });
116
117         //实现banner滚动
118         var count = 0 ;
119         $(".scrollBanner-icon:eq("+0+")").css("background-color",obj.iconHoverColor);
120         setInterval(function(){
121             count++;
122             $(".scrollBanner-banner").css({
123                 "margin-left":"-"+count+"00%",
124                 "transition": "all .5s ease"
125             })
126             $(".scrollBanner-icon").css("background-color",obj.iconColor);
127             $(".scrollBanner-icon:eq("+count+")").css("background-color",obj.iconHoverColor);
128
129             if (count>=obj.images.length) {
130                 $(".scrollBanner-icon:eq("+0+")").css("background-color",obj.iconHoverColor);
131             }
132             if(count>obj.images.length){
133                 count=0;
134                 $(".scrollBanner-banner").css({
135                 "margin-left":"0px",
136                 "transition":"none"
137
138                 })
139
140             }
141         },obj.scrollTime);
142
143     }
144 }(jQuery);
时间: 2024-08-02 22:17:29

jQuery自定义插件--banner图滚动的相关文章

原生JS和jQuery实现banner图滚动那些事

  前  言 阿q 作为一个准前端学员,banner图可是很重要的呢.本人,小白一只,给大家分享几个刚刚学习的基础banner图事件.~~~ 1. 小广告图滚动播放 1.1HTML代码 首先,创建基本结构 <div id="outside"> <div id="inside"> <div>1</div> <div>2</div> <div>3</div> <div&

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

    前  言 絮叨絮叨 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多的事情.它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互. 那么这次,我就和大家来分享一下JQuery中的一个强大的功能--自

原生JS实现各种经典网页特效——Banner图滚动、选项卡切换、广告弹窗等

在制作网页过程中,我们可能会遇到各种常用的经典网页特效,比如Banner图片滚动.选项卡循环播放.右下角广告弹窗.评论提交展示.选项动态增删.剪刀石头布小游戏等等等...是不是感觉都见到过这些场景.那些这些场景都是如何实现的呢?今天,小瑞老师就一口气把所有经典网页特效效果送给大家!!!          全部都是原生JS实现哦~~根本不需要什么JQuery.AngularJS等各种类库,是不是很激动,让我们开始吧~         Tips: 可以收藏博客,保存源码,关键时刻Ctrl+C哦~[微

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自定义插件

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

jquery自定义banner图滚动插件---(解决最后一张图片倒回第一张图片的bug)

banner图的滚动效果动画 最近做项目中banner滚动的时候遇到了一个小bug,当banner滚动到最后一张图再跳回第一张图时, 会出现默认的倒回第一张图的过渡效果,看了几个插件都是这样,所以自定义了一个插件修改了一下, 方便以后使用. by一个刚上路的女码农 有后退动画的banner效果如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>jquer

如何使用JS实现banner图滚动

通过JS实现banner图的滚动主要是定时器的应用 先新建好banner图的几张图片,最后一张与第一张用同一个,保证滚动的不间断 改好样式,需注意所有图片要在同行显示,否则不能向左滚动 声明一个函数,为定时器函数,函数内通过switch结构执行,case的值通过声明一个全局变量每次执行函数的时候使其自加,通过执行函数的次数来确定banner图向左移动多少的距离.需注意第5次要使全局变量归零才能使定时器内的switch结构无限循环,在样式表中可以设置过渡效果,使滚动更有节奏感 接下来实现banne

黑马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