您好,登錄后才能下訂單哦!
基本樣式:
HTML代碼:
<div class="container"> <div class="list"> <!--輪播廣告圖--> <ul class="listImg clearfix" > <li><a href="#"><img src="img/6.jpg" alt="圖片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="圖片一"></a></li> <li><a href="#"><img src="img/2.jpg" alt="圖片二"></a></li> <li><a href="#"><img src="img/3.jpg" alt="圖片三"></a></li> <li><a href="#"><img src="img/4.jpg" alt="圖片四"></a></li> <li><a href="#"><img src="img/5.jpg" alt="圖片五"></a></li> <li><a href="#"><img src="img/6.jpg" alt="圖片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="圖片一"></a></li> </ul> <!--中間的6個小按鈕--> <ul class="buttons clearfix"> <li class="active"><span index="1"></span></li> <li><span index="2"></span></li> <li><span index="3"></span></li> <li><span index="4"></span></li> <li><span index="5"></span></li> <li><span index="6"></span></li> </ul> <!--左右點擊按鈕--> <a href="#" class="arrow" id="prev"><</a> <a href="#" class="arrow" id="next">></a> </div> </div>
CSS代碼:
*{margin:0; padding:0;} ul{list-style:none;} a{text-decoration:none;} .clearfix{zoom:1;} .clearfix:after{display:block; content:''; clear: both;} .container{position:relative; width:790px; height:340px; margin:100px auto; overflow:hidden;} .listImg{position:absolute; width:6320px; height:340px;} .listImg li{float:left;} .listImg li a img{width:100%;} /*箭頭樣式*/ .arrow{ width:30px; height:60px; line-height:60px; text-align:center; background:rgba(0,0,0,.3); color:#fff; font-size: 2em; z-index:100; cursor:pointer; position:absolute; top:40%; display:none; } .arrow:hover{background:rgba(0,0,0,0.6);} #prev{left:20px;} #next{right:20px;} .container:hover .arrow{display:block;} /*鼠標進入輪播圖才顯示兩個按鈕*/ /*小按鈕樣式*/ .buttons{position:absolute; bottom:20px; left:45%; z-index:100;} .buttons li{float:left; margin-right:10px;} .buttons li span{display:block; width:10px; height:10px; border-radius:50%; background:#fff; cursor:pointer;} .buttons li.active span{background:#f00;}
第一步:點擊左右箭頭實現圖片左右滾動
每張圖片的寬度是790px,點擊左箭頭時,圖片向左移動,.listImg的left值會減790px;點擊右箭頭時,圖片向右移動,.listImg的left值會加790px
//點擊左箭頭 $('#prev').click(function(e){ e.preventDefault(); var left = parseInt($('.listImg').css('left'))-790; console.log(left); $('.listImg').css('left', left); }); //點擊右箭頭 $('#next').click(function(e){ e.preventDefault(); var left = parseInt($('.listImg').css('left'))+790; console.log(left); $('.listImg').css('left', left); });
以上代碼的重復量還是比較大的,點擊左右兩個箭頭,一個是加790,一個是減790,所以,可以封裝一個函數
//點擊左箭頭 $('#prev').click(function(e){ e.preventDefault(); play(-790); }); //點擊右箭頭 $('#next').click(function(e){ e.preventDefault(); play(790); }); function play(offset){ var left = parseInt($('.listImg').css('left'))+offset; console.log(left); $('.listImg').css('left', left); }
效果:
第二步:點擊左右箭頭無限滾動
從上例中可以看到,當 left值等于 -790px時,顯示第1張圖片,left值為0時,圖片列表加載到第1張圖片的附屬圖(圖六“每滿1000,立減100”),再次點擊,left變成790px 同時沒有圖片顯示,所以,當left大于 -790px時,要把left值變為-4740px,讓圖片跳到第6張
當left值等于-4740px時,圖片加載到第6張圖,當left值小于-4740px 時,圖片列表加載到第6張圖片的附屬圖(圖一“30天包退,180天包換”),之后就出現了空白,不顯示廣告圖。所以,當left值小于-4740px時,要把left值變成-790px,讓圖片跳到第1張
//點擊左箭頭 $('#prev').click(function(e){ e.preventDefault(); play(-790); }); //點擊右箭頭 $('#next').click(function(e){ e.preventDefault(); play(790); }); function play(offset){ var lists = $('.listImg'); var left = parseInt(lists.css('left'))+offset; lists.css('left', left); //當left值等于-790時,顯示的是第一張圖,點右箭頭,圖片右移 //再次點擊時,圖片加載到第一張圖的附屬圖(圖6),再點就露白了 // 所以left大于-790時,讓left變成-4740(跳到第6張圖) if(left>-790){ lists.css('left',-4740); //當left值等于-4740時,顯示的是第六張圖,點擊左箭頭,圖片左移 //再次點擊時,圖片加載到第六張圖的附屬圖(圖一),再點就露白了 //所以left小于-4740時,讓left變成-790(跳到第1張圖) }else if(left<-4740){ lists.css('left',-790); } }
效果:
第三步:圖片滾動時,激活對應的小圓點
獲取所有的小圓點數組,點擊箭頭時,讓數組加1或減1,對應的小圓點加上active 這個class
var lists = $('.listImg'); //當前播放的是哪張圖片對應的小圓點 var index =1; //獲取所有的小圓點 var btns = $('.buttons li'); //“激活”對應的小圓點 function showButton(){ //btns的下標從0開始,index從1到6,共6個小圓點,實際的圖片下標是index-1 btns.eq(index-1).addClass('active').siblings('.active').removeClass('active'); } //點擊左箭頭 $('#prev').click(function(e){ e.preventDefault(); //向左時,index減1 index-=1; showButton(); play(-790); }); //點擊右箭頭 $('#next').click(function(e){ e.preventDefault(); //向右時,index加1 index+=1; showButton(); play(790); });
效果:
上圖中有一個問題,當點擊箭頭超過數組最大下標時,就沒有小圓點變紅了,而數組最大下標是5。所以,在點箭頭的時候需要對下標做一個判斷,index=6,就讓index=1;index=1,就讓index=6 (數組的index是0到5,小圓點的index是1到6,數組的index=小圓點index-1)
//點擊左箭頭 $('#prev').click(function(e){ e.preventDefault(); //index=1,就讓index=6,否則加1 index==1?index=6:(index-=1); showButton(); play(-790); }); //點擊右箭頭 $('#next').click(function(e){ e.preventDefault(); //index=6,就讓index=1,否則減1 index==6?index=1:(index+=1); showButton(); play(790); });
效果:
第四步:點擊小圓點,切換對應的廣告圖
圖片之所以能滾動,最主要是play方法中的 offset參數起了作用,右向滾動一張,則left值加上790px,因此,滾動三張,left值加上790px *3,反之亦然
同樣的道理,當小圓點默認在第一個時,點擊第3個小圓點時,要跳到第三張圖片,left值就是(3-1)*790,即 (targetIndex - index)*790 (targetIndex:要點擊哪個小圓點,index:當前的小圓點)
//點擊小圓點,切換圖片 btns.click(function(){ //獲取被點擊的小圓點的自定義屬性index的值 var targetIndex = parseInt($(this).children().attr('index')); console.log(targetIndex); //定義圖片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新當前的index index = targetIndex; showButton(); });
效果:
上圖中,當重復點一個小圓點的時候,程序還在不斷的獲取自定義的index值,也就是說還在不斷的去執行play方法,這個是完全沒有必要的。
這里可以做一個判斷
//點擊小圓點,切換圖片 btns.click(function(){ //如果被點擊的小圓點已經是被選中了的那一個(簡單說就是重復點一個小圓點) // 而被選中的小圓點都會加上一個active if($(this).hasClass('active')){ return; //直接退出點擊事件的方法 } //獲取被點擊的小圓點的自定義屬性index的值 var targetIndex = parseInt($(this).children().attr('index')); console.log(targetIndex); //定義圖片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新當前的index index = targetIndex; showButton(); });
效果:(反復點的時候,不再獲取index為4的值,即不再重復執行其它方法)
第五步:添加動畫,自動播放
頁面一加載完成,圖片就自動向左滑動,而向左滑動這個是可以通過點擊右箭頭實現的,所以我們需要定義一個啟動方法,在方法里面為右箭頭匹配點擊事件,并觸發play方法播放動畫
//間隔時間,多少毫秒播一次 var interval = 3000; var timer; //啟動動畫 function start() { timer = setInterval(function () { $('#next').trigger('click'); play(); }, interval); } start();
效果:
第六步:停止動畫
當鼠標進入廣告圖或者是點擊左右箭頭、小圓點的時候,動畫就應該終止
//停止動畫 function stop() { clearTimeout(timer); } $('.container').hover(stop, start); //鼠標移入停止,移出啟動 //點擊左箭頭 $('#prev').click(function(e){ e.preventDefault(); //終止動畫 if(lists.is(':animated')){ return; } //index=1,就讓index=6,否則加1 index==1?index=6:(index-=1); showButton(); play(-790); }); //點擊右箭頭 $('#next').click(function(e){ e.preventDefault(); //終止動畫 if(lists.is(':animated')){ return; } //index=6,就讓index=1,否則減1 index==6?index=1:(index+=1); showButton(); play(790); }); //點擊小圓點,切換圖片 btns.click(function(){ //如果被點擊的小圓點已經是被選中了的那一個(簡單說就是重復點一個小圓點) // 而被選中的小圓點都會加上一個active if($(this).hasClass('active') || lists.is(':animated')){ return; //直接退出點擊事件的方法 } //獲取被點擊的小圓點的自定義屬性index的值 var targetIndex = parseInt($(this).children().attr('index')); //定義圖片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新當前的index index = targetIndex; showButton(); });
效果:
當然,圖片滑動的時候,最好是能用上animate事件,有一個動畫的效果,而不是直接的切換某一張圖片到哪個位置上。
代碼匯總:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{margin:0; padding:0;} ul{list-style:none;} a{text-decoration:none;} .clearfix{zoom:1;} .clearfix:after{display:block; content:''; clear: both;} .container{position:relative; width:790px; height:340px; margin:100px auto; overflow:hidden;} .listImg{position:absolute; width:6320px; height:340px;} .listImg li{float:left;} .listImg li a img{width:100%;} /*箭頭樣式*/ .arrow{ width:30px; height:60px; line-height:60px; text-align:center; background:rgba(0,0,0,.3); color:#fff; font-size: 2em; z-index:100; cursor:pointer; position:absolute; top:40%; display:none; } .arrow:hover{background:rgba(0,0,0,0.6);} #prev{left:20px;} #next{right:20px;} .container:hover .arrow{display:block;} /*鼠標進入輪播圖才顯示兩個按鈕*/ /*小按鈕樣式*/ .buttons{position:absolute; bottom:20px; left:45%; z-index:100;} .buttons li{float:left; margin-right:10px;} .buttons li span{display:block; width:10px; height:10px; border-radius:50%; background:#fff; cursor:pointer;} .buttons li.active span{background:#f00;} </style> </head> <body> <div class="container"> <div class="list"> <!--輪播廣告圖--> <ul class="listImg clearfix" > <li><a href="#"><img src="img/6.jpg" alt="圖片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="圖片一"></a></li> <li><a href="#"><img src="img/2.jpg" alt="圖片二"></a></li> <li><a href="#"><img src="img/3.jpg" alt="圖片三"></a></li> <li><a href="#"><img src="img/4.jpg" alt="圖片四"></a></li> <li><a href="#"><img src="img/5.jpg" alt="圖片五"></a></li> <li><a href="#"><img src="img/6.jpg" alt="圖片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="圖片一"></a></li> </ul> <!--中間的6個小按鈕--> <ul class="buttons clearfix"> <li class="active"><span index="1"></span></li> <li><span index="2"></span></li> <li><span index="3"></span></li> <li><span index="4"></span></li> <li><span index="5"></span></li> <li><span index="6"></span></li> </ul> <!--左右點擊按鈕--> <a href="#" class="arrow" id="prev"><</a> <a href="#" class="arrow" id="next">></a> </div> </div> <script src="dist/jquery-1.8.3.min.js"></script> <script> var lists = $('.listImg'); //獲取所有的小圓點 var btns = $('.buttons li'); //當前播放的是哪張圖片對應的小圓點 var index =1; //廣告圖片的張數 var len = 6; //間隔時間,多少毫秒播一次 var interval = 3000; var timer; //滾動圖片 function play(offset){ var left = parseInt(lists.css('left'))+offset; if (offset>0) { offset = '+=' + offset; } else { offset = '-=' + Math.abs(offset); } lists.animate({'left':offset},500,function(){ if(left>-790){ lists.css('left', -790*len); }else if(left< -790*len ){ lists.css('left', -790); } }) } //啟動動畫 function start() { timer = setInterval(function () { $('#next').trigger('click'); play(); }, interval); } //停止動畫 function stop() { clearTimeout(timer); } //點擊左箭頭 $('#prev').click(function(e){ e.preventDefault(); if(lists.is(':animated')){ return; } //index=1,就讓index=6,否則加1 index==1?index=len:(index-=1); showButton(); play(-790); }); //點擊右箭頭 $('#next').click(function(e){ e.preventDefault(); if(lists.is(':animated')){ return; } //index=6,就讓index=1,否則減1 index==len?index=1:(index+=1); showButton(); play(790); }); //“激活”對應的小圓點 function showButton(){ //btns的下標從0開始,index從1到6,共6個小圓點,實際的圖片下標是index-1 btns.eq(index-1).addClass('active').siblings('.active').removeClass('active'); } //點擊小圓點,切換圖片 btns.click(function(){ //如果被點擊的小圓點已經是被選中了的那一個(簡單說就是重復點一個小圓點) // 而被選中的小圓點都會加上一個active if($(this).hasClass('active') || lists.is(':animated')){ return; //直接退出點擊事件的方法 } //獲取被點擊的小圓點的自定義屬性index的值 var targetIndex = parseInt($(this).children().attr('index')); //定義圖片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新當前的index index = targetIndex; showButton(); }); $('.container').hover(stop, start); //鼠標移入停止,移出啟動 start(); </script> </body> </html>
以上僅僅是閑來無事整理的一個小demo,實際使用中,也可以使用類似 Swiper、Hammer等優秀的插件
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。