jQuery实现轮播切换以及将其封装成插件(3)

  在前两篇博文中,我们写了一个普通的轮播切换。但是我们不能每一次需要这个功能就把这些代码有重新敲一次。下面我们就将它封装成一个插件。

  至于什么是插件,又为什么要封装插件,不是本文考虑的内容。

   我们趁着刚才的思路还在,直接开始写。

一、jQuery插件的基本结构:

    我只介绍本例中用到的一种插件:

1 (function($){
2     $.fn.extend({
3         "插件函数名(随意)":function(){
4             //函数内容
5          
6         }
7     });
8 })(jQuery);

二、要做哪些准备

    按照我的个人习惯。首先需要前面博文中我们写的html代码作为模板。使用jQuery动态生成它。

然后将涉及到的CSS式样,放入单独的文件。最后将js函数放入上面的插件函数中,作为函数中的函数。

 1 ;(function($){
 2     $.fn.extend({
 3         "mySlider":function(){
 4             if(!this.hasClass("gr_UI_sliderBox")){
 5                 console.log("this dom not have class gr_UI_sliderBox");
 6                 return;
 7             }
 8  
 9             //be sure only once and add ul.
10             var $sliderUl = this.find("ul");
11             if($sliderUl.length>=1){
12                 return;
13             }
14  
15             var $add = $("<ul class='img_ul'><li class='slider_Item_1'></li><li class='slider_Item_2'></li><li class='slider_Item_3'></li></ul><ul class='btn_ul'><li></li><li></li><li></li></ul>");
16             $(this).append($add);
17  
18             function moveByIndex(index){
19  
20                 $(".gr_UI_sliderBox ul.img_ul li.slider_current").removeClass("slider_current");
21                 $(".gr_UI_sliderBox ul.img_ul li:eq(" + index + ")").addClass("slider_current");
22                 var move_x = -index * 800;
23                 var str_m_x = move_x + "px";
24                 var $sliderUl = $(".gr_UI_sliderBox ul.img_ul");
25                 $sliderUl.animate({left: str_m_x}, "slow");
26                 $(".gr_UI_sliderBox ul.btn_ul li:eq(" + index + ")").addClass("current_btn").siblings().removeClass("current_btn");
27             }
28  
29             function s_Run(){
30                 var newCurrentIndex = $(".gr_UI_sliderBox ul.img_ul li.slider_current").index() + 1;
31                 var liCount = $(".gr_UI_sliderBox ul.img_ul li").length;
32                 if(newCurrentIndex >= liCount){
33                     newCurrentIndex = 0;
34                 }
35                 console.log("new index : " + newCurrentIndex + "     length : " + liCount);
36                 moveByIndex(newCurrentIndex);
37             }
38      
39         }
40  
41     });

这样,我们就可以通过mySlider函数动态生成轮播切换。

但是,就以目前的代码,是不包括事件的。注意在插件函数中是不能使用ready()的。我们可以自己初始化,并且绑定事件和函数。

 1        //init
 2             var tCtr;
 3             $(".gr_UI_sliderBox ul.img_ul li:eq(0)").addClass("slider_current");
 4             $(".gr_UI_sliderBox ul.btn_ul li:eq(0)").addClass("current_btn");
 5        
 6  
 7        //绑定事件
 8             $(".gr_UI_sliderBox ul.btn_ul li").bind({
 9                 mouseenter:function(){
10                     clearTimeout(tCtr);
11                     moveByIndex($(this).index());
12                 },
13                 mouseleave:function(){
14                     tCtr = setInterval(s_Run, 2000);
15                 }
16  
17             });
18  
19             tCtr = setInterval(s_Run, 2000);

我们完成了插件的编写,但是我们要如何使用呢?

下面我们来调用它。

我们将所需要的文件(插件.js和插件.css)配置到工程中。在需要使用的地方定义一个<div></div>

 

<div class="gr_UI_sliderBox" id="test"></div>

在上面的代码中,gr_UI_sliderBox就是我们的插件类。然后再ready()中调用我们的生成“轮播”的插件函数:

1 $(document).ready(function(){
2     $("#test").mySlider();
3 });

这样,刷新页面后我们就生成了,和上一篇博文中一模一样的自定义控件了。

通过这三篇博文,我们完成了一个轮播切换功能的编写。

写的不好,献丑了。

原文地址:https://www.cnblogs.com/webARM/p/3781806.html