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 });
这样,刷新页面后我们就生成了,和上一篇博文中一模一样的自定义控件了。
通过这三篇博文,我们完成了一个轮播切换功能的编写。
写的不好,献丑了。