jquery插件編寫——輪播圖淡入淡出(支持靈活配置)

今天給大家實現(xiàn)一個可擴展的,靈活的輪播圖淡入淡出效果盟蚣,注意:此插件依賴jquery逞怨;直接看代碼碘橘。

1.參數(shù)配置
ulClass      ---包裹每個輪播圖的容器類名,默認img
numClass     ---包裹輪播圖底部頁碼控制的容器類名碉钠,默認num
btnL         ---上一張按鈕類名纲缓,默認btn_l
btnR         ---下一張按鈕類名,默認btn_r
bannerWidth  ---輪播圖寬度喊废,number祝高,默認0
timeInterval ---輪播的時間間隔,默認2秒切換一張banner污筷,number
slideSpeed   ---輪播的速度(一張切到另一張的動畫持續(xù)時間)工闺,默認500ms,number
2.插件代碼
;(function($,window,document,undefined){
    $.fn.bannerSlide=function(options){
            var ulClass      = options.ulClass?("."+options.ulClass):'.img';            //包裹每個輪播圖的容器類名
            var numClass     = options.numClass?("."+options.numClass):'.num';      //包裹輪播圖底部頁碼控制的容器類名
            var btnL         = options.btnL?("."+options.btnL):'.btn_l';                //上一張按鈕
            var btnR         = options.btnR?("."+options.btnR):'.btn_r';                //下一張按鈕
            var bannerWidth  = options.bannerWidth?options.bannerWidth:0;           //輪播圖寬度瓣蛀,number
            var timeInterval = options.timeInterval?options.timeInterval:2000;          //輪播的時間間隔陆蟆,默認2秒切換一張banner,number
            var slideSpeed   = options.slideSpeed?options.slideSpeed:500;           //輪播的速度(一張切到另一張的動畫持續(xù)時間)惋增,默認500ms叠殷,number
            var $that        = this;

            var i=0;
            //克隆節(jié)點,以實現(xiàn)無縫輪播
            var clone=this.find(ulClass+" li").first().clone();
            this.find(ulClass).append(clone);
            var size=this.find(ulClass+" li").size();
            for(var j=0;j<size-1;j++){
                this.find(numClass).append("<li></li>");
            }
            this.find(numClass+" li").first().addClass("on");

            /*鼠標劃入圓點*/
            this.find(numClass+" li").hover(function(){
                var index=$(this).index();
                i=index;
                $that.find(ulClass).stop().animate({left:-index*bannerWidth},slideSpeed);
                $(this).addClass("on").siblings().removeClass("on");
            })

            /*自動輪播*/
            var t=setInterval(function(){
                i++;
                move()
            },timeInterval);

            /*對banner定時器的操作*/
            this.hover(function(){
                clearInterval(t);
            },function(){
                t=setInterval(function(){
                    i++;
                    move()
                },timeInterval)
            })

            /*向左的按鈕*/
            this.find(btnL).click(function(){
                i--;
                move();
            })

            /*向右的按鈕*/
            this.find(btnR).click(function(){
                i++;
                move();
            })

            
            function move(){
                if(i==size){
                    $that.find(ulClass).css({left:0});
                    i=1;
                }

                if(i==-1){
                    $that.find(ulClass).css({left:-(size-1)*bannerWidth});
                    i=size-2;
                }

                $that.find(ulClass).stop().animate({left:-i*bannerWidth},slideSpeed);

                if(i==size-1){
                    $that.find(numClass+" li").eq(0).addClass("on").siblings().removeClass("on");
                }else{
                    $that.find(numClass+" li").eq(i).addClass("on").siblings().removeClass("on");

                }
            }
        };

})(jQuery);
3.調(diào)用方式
參數(shù)都是可選的器腋,不傳則為默認的
$(".banner").bannerSlide({
        'bannerWidth':550,
        'timeInterval':1000
});

$(".banner2").bannerSlide({
        'bannerWidth':550,
        'timeInterval':3000,
        'slideSpeed':0.1 //相當于瞬間切換
});
4.示例代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無縫輪播</title>
<style>
*{ padding:0; margin:0; list-style:none;}
.banner{ margin:100px auto; border:5px solid #000; width:550px; height:300px; overflow:hidden; position:relative;}
.banner .img{ width:5000px; position:absolute; left:0px; top:0;}
.banner .img li{ float:left;}

.banner .num{ position:absolute; width:100%; bottom:10px; left:0; text-align:center; font-size:0px;}
.banner .num li{ width:10px;height:10px; background:#888; border-radius:50%; display:inline-block; margin:0 3px; cursor:pointer;}
.banner .num li.on{ background:#F60;}

.banner .btn{ width:30px; height:50px; background:rgba(0,0,0,0.5); position:absolute; top:50%; margin-top:-25px; cursor:pointer; text-align:center; line-height:50px; color:#fff; font-size:40px; font-family:"宋體"; display:none;}
.banner:hover .btn{ display:block;}

.banner .btn_l{ left:0;}
.banner .btn_r{ right:0;}


.bannercss{ margin:100px auto; border:5px solid #000; width:550px; height:300px; overflow:hidden; position:relative;}
.bannercss .img{ width:5000px; position:absolute; left:0px; top:0;}
.bannercss .img li{ float:left;}

.bannercss .num{ position:absolute; width:100%; bottom:10px; left:0; text-align:center; font-size:0px;}
.bannercss .num li{ width:10px;height:10px; background:#888; border-radius:50%; display:inline-block; margin:0 3px; cursor:pointer;}
.bannercss .num li.on{ background:#F60;}

.bannercss .btn{ width:30px; height:50px; background:rgba(0,0,0,0.5); position:absolute; top:50%; margin-top:-25px; cursor:pointer; text-align:center; line-height:50px; color:#fff; font-size:40px; font-family:"宋體"; display:none;}
.bannercss:hover .btn{ display:block;}

.bannercss .btn_l{ left:0;}
.bannercss .btn_r{ right:0;}

</style>
<script type="text/javascript" src="js/jquery-1.12.0.min.js"></script>
<script type="text/javascript">

;(function($,window,document,undefined){
    $.fn.bannerSlide=function(options){

            var ulClass      = options.ulClass?("."+options.ulClass):'.img';            //包裹每個輪播圖的容器類名
            var numClass     = options.numClass?("."+options.numClass):'.num';      //包裹輪播圖底部頁碼控制的容器類名
            var btnL         = options.btnL?("."+options.btnL):'.btn_l';                //上一張按鈕
            var btnR         = options.btnR?("."+options.btnR):'.btn_r';                //下一張按鈕
            var bannerWidth  = options.bannerWidth?options.bannerWidth:0;           //輪播圖寬度溪猿,number
            var timeInterval = options.timeInterval?options.timeInterval:2000;          //輪播的時間間隔钩杰,默認2秒切換一張banner纫塌,number
            var slideSpeed   = options.slideSpeed?options.slideSpeed:500;           //輪播的速度(一張切到另一張的動畫持續(xù)時間),默認500ms讲弄,number
            var $that        = this;

            var i=0;
            //克隆節(jié)點措左,以實現(xiàn)無縫輪播
            var clone=this.find(ulClass+" li").first().clone();
            this.find(ulClass).append(clone);
            var size=this.find(ulClass+" li").size();
            for(var j=0;j<size-1;j++){
                this.find(numClass).append("<li></li>");
            }
            this.find(numClass+" li").first().addClass("on");

            /*鼠標劃入圓點*/
            this.find(numClass+" li").hover(function(){
                var index=$(this).index();
                i=index;
                $that.find(ulClass).stop().animate({left:-index*bannerWidth},slideSpeed);
                $(this).addClass("on").siblings().removeClass("on");
            })

            /*自動輪播*/
            var t=setInterval(function(){
                i++;
                move()
            },timeInterval);

            /*對banner定時器的操作*/
            this.hover(function(){
                clearInterval(t);
            },function(){
                t=setInterval(function(){
                    i++;
                    move()
                },timeInterval)
            })

            /*向左的按鈕*/
            this.find(btnL).click(function(){
                i--;
                move();
            })

            /*向右的按鈕*/
            this.find(btnR).click(function(){
                i++;
                move();
            })

            
            function move(){
                if(i==size){
                    $that.find(ulClass).css({left:0});
                    i=1;
                }

                if(i==-1){
                    $that.find(ulClass).css({left:-(size-1)*bannerWidth});
                    i=size-2;
                }

                $that.find(ulClass).stop().animate({left:-i*bannerWidth},slideSpeed);

                if(i==size-1){
                    $that.find(numClass+" li").eq(0).addClass("on").siblings().removeClass("on");
                }else{
                    $that.find(numClass+" li").eq(i).addClass("on").siblings().removeClass("on");

                }
            }
        };

})(jQuery);


$(function(){
    $(".banner").bannerSlide({
        'bannerWidth':550,
        'timeInterval':1000
    });
    $(".banner2").bannerSlide({
        'bannerWidth':550,
        'timeInterval':3000,
        'slideSpeed':0.1 //相當于瞬間切換
    });
});

</script>


</head>

<body>
<div class="banner">
    <ul class="img">
        <li><a href="#"><img src="images/1.jpg"></a></li>
        <li><a href="#"><img src="images/2.jpg"></a></li>
        <li><a href="#"><img src="images/3.jpg"></a></li>
        <li><a href="#"><img src="images/4.jpg"></a></li>
    </ul>
    
    <ul class="num">        
    </ul>
    
    <div class="btn btn_l"><</div>
    <div class="btn btn_r">></div>

</div>

<div class="banner2 bannercss">
    <ul class="img">
        <li><a href="#"><img src="images/1.jpg"></a></li>
        <li><a href="#"><img src="images/2.jpg"></a></li>
        <li><a href="#"><img src="images/3.jpg"></a></li>
        <li><a href="#"><img src="images/4.jpg"></a></li>
    </ul>
    
    <ul class="num">        
    </ul>
    
    <div class="btn btn_l"><</div>
    <div class="btn btn_r">></div>

</div>

</body>
</html>
快應用到你的項目里吧~~ 配置靈活,一個頁面可有多個輪播組件避除,互不干擾怎披。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胸嘁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凉逛,更是在濱河造成了極大的恐慌性宏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状飞,死亡現(xiàn)場離奇詭異毫胜,居然都是意外死亡,警方通過查閱死者的電腦和手機诬辈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門酵使,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人焙糟,你說我怎么就攤上這事口渔。” “怎么了穿撮?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵缺脉,是天一觀的道長。 經(jīng)常有香客問我悦穿,道長枪向,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任咧党,我火速辦了婚禮秘蛔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘傍衡。我一直安慰自己深员,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布蛙埂。 她就那樣靜靜地躺著倦畅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绣的。 梳的紋絲不亂的頭發(fā)上叠赐,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音屡江,去河邊找鬼芭概。 笑死,一個胖子當著我的面吹牛惩嘉,可吹牛的內(nèi)容都是我干的罢洲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼文黎,長吁一口氣:“原來是場噩夢啊……” “哼惹苗!你這毒婦竟也來了殿较?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤桩蓉,失蹤者是張志新(化名)和其女友劉穎淋纲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體院究,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡帚戳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了儡首。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片片任。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔬胯,靈堂內(nèi)的尸體忽然破棺而出对供,到底是詐尸還是另有隱情,我是刑警寧澤氛濒,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布产场,位于F島的核電站,受9級特大地震影響舞竿,放射性物質(zhì)發(fā)生泄漏京景。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一骗奖、第九天 我趴在偏房一處隱蔽的房頂上張望确徙。 院中可真熱鬧,春花似錦执桌、人聲如沸鄙皇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伴逸。三九已至,卻和暖如春膘壶,著一層夾襖步出監(jiān)牢的瞬間错蝴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工颓芭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顷锰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓畜伐,卻偏偏與公主長得像馍惹,于是被迫代替她去往敵國和親躺率。 傳聞我的和親對象是個殘疾皇子玛界,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容