亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

基于jquery實現的仿優酷圖片輪播特效代碼

2019-11-20 10:48:44
字體:
來源:轉載
供稿:網友

本文為大家分享了一種常見的并且比較復雜的輪播效果,就是優酷主界面的輪播圖,效果圖如下:

我們在書寫代碼之前,先分析效果圖的結構:

1. 左右兩個方向按鈕,可以用來切換上一張與下一張。

2. 下方有分頁指示器,用來標注滾動到了第幾張,當然,你點擊對應的按鈕,也可以跳轉到對應的圖片。

3. 中間主要顯示區域就是用來擺放需要輪播的圖片。

根據上面描述,我們首先可以書寫HTML代碼。

一、HTML代碼

<body>   <div id="youku">     <div class="anniu">       <span class="zuo"></span>       <span class="you"></span>     </div>     <ul class="tuul">       <li class="no0"><a href="#"><img src="images/0.jpg" /></a></li>       <li class="no1"><a href="#"><img src="images/1.jpg" /></a></li>       <li class="no2"><a href="#"><img src="images/2.jpg" /></a></li>       <li class="no3"><a href="#"><img src="images/3.jpg" /></a></li>       <li class="no4"><a href="#"><img src="images/4.jpg" /></a></li>       <li class="waiting"><a href="#"><img src="images/5.jpg" /></a></li>       <li class="waiting"><a href="#"><img src="images/6.jpg" /></a></li>       <li class="waiting"><a href="#"><img src="images/7.jpg" /></a></li>       <li class="waiting"><a href="#"><img src="images/8.jpg" /></a></li>     </ul>     <div class="xiaoyuandian">       <ul>         <li></li>         <li></li>         <li class="cur"></li>         <li></li>         <li></li>         <li></li>         <li></li>         <li></li>         <li></li>       </ul>     </div>   </div> </body> 

代碼內容一目了然,與我上面所描述的一致;這里有兩點我需要說明:
1. class為tuul的ul,也就是存放需要輪播的圖片;里面的li主要有兩種class:包裝為 "no" 與 "waiting" 形式,其中 "no" 系列表示當前可能處于"活躍"狀態的圖片,而 "waiting" 表示這些圖片當前處于隱藏狀態,在接下來的CSS代碼中就有體現。

2. 分頁指示器默認設置第三個 li的class 為 cur. 因為tuul中初始的時候設置的 "活躍" 圖片的個數是5張,所以默認讓第三章居中顯示。但不知道大家有沒有疑惑,初始狀態的時候,界面上面顯示的圖片個數為3張,所以為什么不選擇第二張作為居中顯示的圖片? 那是因為考慮到點擊左邊按鈕的情況,如果選擇第二張居中顯示,第一張是可以看到,但第一張前面就沒有圖片了。當你點擊左按鈕的時候,就 "露餡" 了。所以整體的設計思路是:界面上面顯示三張,超出界面的部分,左右各有一張,只是看不到而已。在下面的講解中,我將詳細講解這個實現過程。

二、CSS代碼

<style type="text/css">     *{       padding: 0;       margin: 0;     }     #youku{       width: 1189px;       height: 360px;       margin: 100px auto;       position: relative;       overflow: hidden;     }     #youku ul{       list-style: none;     }     #youku .tuul li{       position: absolute;       background-color: black;     }     #youku li.waiting{       display: none;     }     #youku li img{       width: 100%;       height: 100%;     }         #youku .anniu .zuo{       position: absolute;       width: 45px;       height: 45px;       background:url(images/zuo.png) no-repeat;       top:100px;       left:10px;       z-index: 1000;       cursor: pointer;     }     #youku .anniu .you{       position: absolute;       width: 45px;       height: 45px;       background:url(images/you.png) no-repeat;       top:100px;       right:10px;       z-index: 1000;       cursor: pointer;     }      #youku li.no0{width: 174px;height:122px;left:-116px;top:100px;z-index: 777;}     #youku li.no1{width: 356px;height:223px;left:0px;top:26px;z-index: 888;}     #youku li.no2{width: 642px;height:273px;left:274px;top:0px;z-index: 999;}     #youku li.no3{width: 356px;height:223px;left:834px;top:26px;z-index: 888;}     #youku li.no4{width: 174px;height:122px;left:1097px;top:100px;z-index: 777;}      #youku li.no1 img , #youku li.no3 img{       opacity: 0.3;     }     #youku .xiaoyuandian{       width: 600px;       height: 20px;       position: absolute;       top: 312px;       left: 454px;     }     #youku .xiaoyuandian ul li{       float: left;       width: 16px;       height: 16px;       background-color: blue;       margin-right: 10px;       border-radius: 100px;       cursor: pointer;     }     #youku .xiaoyuandian ul li.cur{       background-color:green;     }   </style> 

關于這里的CSS我就不作一一說明了,如果想了解更具體的話,請參考我以前寫的系列 JS & JQuery. 這里,我只說明兩點:
1. 對 "活躍" 圖片的CSS的設置,即 #youku li.no0~no4的設置,注意到no0的left值是負數,而no1的left值是0,這就印證了上面我所表達的觀點,可視范圍靜止狀態是顯示三張圖片的,而其余兩張圖片是分別在可視范圍的左右側。注意設置各個圖片的z-index值,使得有立體層次感,值越大越靠前顯示。

2. 對可視范圍兩邊的圖片,設置opacity, 使得他們變暗。

設置完以上CSS代碼后,剖析圖如下:

三、JQuery代碼

<script type="text/javascript">     $(document).ready(       function() {         //定義一個初始速度         var sudu = 600;         var shangdi = false;          //定義json         var json0 = {"width":"174px","height":"122px","left":"-116px", "top":"100px"};         var json1 = {"width":"356px","height":"223px","left":"0px", "top":"26px"};         var json2 = {"width":"642px","height":"273px","left":"274px", "top":"0"};         var json3 = {"width":"356px","height":"223px","left":"834px", "top":"26px"};         var json4 = {"width":"174px","height":"122px","left":"1097px", "top":"100px"};                  var nowimg = 2;          var timer = setInterval(youanniuyewu,2000);         $("#youku").mouseenter(           function() {             clearInterval(timer);           }         );          $("#youku").mouseleave(           function() {             clearInterval(timer);             timer = setInterval(youanniuyewu,2000);           }         );           $(".you").click(youanniuyewu);         function youanniuyewu(){             if(!$(".tuul li").is(":animated") || shangdi == true){               if(nowimg < 8){                 nowimg ++;               }else{                 nowimg = 0;               }               $(".xiaoyuandian li").eq(nowimg).addClass("cur").siblings().removeClass("cur");                //先交換位置               $(".no1").animate(json0,sudu);               $(".no2").animate(json1,sudu);               $(".no3").animate(json2,sudu);               $(".no4").animate(json3,sudu);               $(".no0").css(json4);                              //再交換身份               $(".no0").attr("class","waiting");               $(".no1").attr("class","no0");               $(".no2").attr("class","no1");               $(".no3").attr("class","no2");               $(".no4").attr("class","no3");               //上面的交換身份,把no0搞沒了!所以,我們讓no1前面那個人改名為no0               if($(".no3").next().length != 0){                 //如果no3后面有人,那么改變這個人的姓名為no4                 $(".no3").next().attr("class","no4");               }else{                 //no3前面沒人,那么改變此時隊列最開頭的那個人的名字為no0                 $(".tuul li:first").attr("class","no4");               }                              //發現寫完上面的程序之后,no6的行內樣式還是json0的位置,所以強制:               $(".no4").css(json4);             }                         }          $(".zuo").click(           function(){                           if(!$(".tuul li").is(":animated") || shangdi == true){                if(nowimg > 0){                 nowimg --;               }else{                 nowimg = 8;               }               $(".xiaoyuandian li").eq(nowimg).addClass("cur").siblings().removeClass("cur");               //先交換位置:               $(".no0").animate(json1,sudu);               $(".no1").animate(json2,sudu);               $(".no2").animate(json3,sudu);               $(".no3").animate(json4,sudu);               $(".no4").css(json0);                //再交換身份               $(".no4").attr("class","waiting");               $(".no3").attr("class","no4");               $(".no2").attr("class","no3");               $(".no1").attr("class","no2");               $(".no0").attr("class","no1");                //上面的交換身份,把no0搞沒了!所以,我們讓no1前面那個人改名為no0               if($(".no1").prev().length != 0){                 //如果no1前面有人,那么改變這個人的姓名為no0                 $(".no1").prev().attr("class","no0");               }else{                 //no1前面沒人,那么改變此時隊列最后的那個人的名字為no0                 $(".tuul li:last").attr("class","no0");               }                $(".no0").css(json0);             }                         }         );          $("#youku .xiaoyuandian li").click(           function(){             sudu = 100; //臨時把這個速度變化一下             shangdi = true; //flag              var yonghuandexuhao = $(this).index();             if(yonghuandexuhao > nowimg ){               var cishu = yonghuandexuhao - nowimg;               console.log("主人,我已經通知上帝幫你按右按鈕" + cishu + "次");                for(var i = 1 ; i<= cishu ; i++){                 $(".you").trigger("click"); //讓上帝幫你按一次又按鈕               }              }else{               var cishu = nowimg - yonghuandexuhao;               console.log("主人,我已經通知上帝幫你按左按鈕" + cishu + "次");               for(var i = 1 ; i<= cishu ; i++){                 $(".zuo").trigger("click"); //讓上帝幫你按一次又按鈕               }             }             nowimg = yonghuandexuhao;             sudu = 600; //再把速度恢復             shangdi = false;           }                    );       }     );   </script> 

JQuery代碼中關于定時器的控制,分頁按鈕的點擊,這里我就不介紹了,如果感興趣的話,請參照:JS & JQuery 里面的內容。
這里我主要說明兩點:

1. json0, json1, json2, json3, json4數據的定義,其初始值與CSS上面定義的一致,它的目的就是用來方便的切換各個圖片的絕對位置,下面我會詳細介紹到。

2. 主要講解右按鈕點擊事件,也就是youanniuyewu這個方法。

2-1) nowImg索引簡單的處理:

if(nowimg < 8){   nowimg ++; }else{   nowimg = 0; } 

如果不是最后一張,點擊一下 "右按鈕", 則 nowImg值加1, 如果是最后一張,則nowImg從0開始。

2-2)點擊一下 "右按鈕", 關于分頁指示器的處理:

$(".xiaoyuandian li").eq(nowimg).addClass("cur").siblings().removeClass("cur"); 

將當前顯示的圖片對應的指示器按鈕高亮顯示,兄弟節點普通顯示。
2-3)交換圖片位置:

//先交換位置 $(".no1").animate(json0,sudu); $(".no2").animate(json1,sudu); $(".no3").animate(json2,sudu); $(".no4").animate(json3,sudu); $(".no0").css(json4); 

前面四句話,會動畫執行圖片移動的效果。靜止狀態的時候是三張圖片顯示在我們眼前;運動的時候,可以想象得出最多有四張圖片顯示在我們眼前,上面四句代碼執行過程中,剖析圖如下:

即在動畫執行的過程中,"no1" 的圖片漸漸離開屏幕可視范圍,與此同時, "no4" 的圖片漸漸顯示在屏幕可視范圍。

而在動畫執行的過程中,"no0" 的這張圖片早就定位到 "no4" 的位置(此時在可視范圍之外,因為這里的animate動畫是異步執行的,不會延遲$(.no0).css(json4)這句代碼的執行。當這一組代碼執行完畢后,剖析圖如下:


此時,我們再將那些 處于 "waiting" 狀態的圖片考慮進來,則此時的剖析圖如下:

2-4)以上流程執行完畢后,是完成了一次輪播效果,但是此時各個圖片的牌號順序已經被打亂,為了使得輪播繼續下去,我們應該將牌號再 "恢復" 過來。所以我們可以添加以下代碼:

//再交換身份 $(".no0").attr("class","waiting"); $(".no1").attr("class","no0"); $(".no2").attr("class","no1"); $(".no3").attr("class","no2"); $(".no4").attr("class","no3"); 

上面的代碼執行后,意味著將 上圖中 "no0" 這張圖片拉入到 "waiting" 區域,而其他四個的編號則依次往前推算。執行完畢后,剖析圖如下:

正如上圖所示,"活躍"狀態的5張圖片,最后一張現在也變成了 "waiting" 狀態,所以需要有人替補上去,才能繼續動畫的執行。很顯然,應該拿 "waiting" 列表的第一張,也就是 "活躍" 狀態的后面一張圖片 "頂替" 上去;如果后面沒有 "waiting" 狀態的圖片了, 說明這些 "waiting" 狀態的圖片全部 "跑到"  class 為 tuul所有列表的前面去了,那就抓取這些列表的第一張作為 "頂替者"。代碼如下:

if($(".no3").next().length != 0){   //如果no3后面有人,那么改變這個人的姓名為no4   $(".no3").next().attr("class","no4"); }else{   //no3前面沒人,那么改變此時隊列最開頭的那個人的名字為no0   $(".tuul li:first").attr("class","no4"); }                //發現寫完上面的程序之后,no6的行內樣式還是json0的位置,所以強制: $(".no4").css(json4); 

 這里需要注意的是:雖然已經經歷了很多步奏的位置信息的改變及牌號的改變,但是剛剛被拉入等待區域的那張圖片在li中的與兄弟節點的位置關系并沒有發生改變,只是class屬性變成了 "waiting". 即此時的tuul中li的代碼結構如下:

<ul class="tuul">   <li class="waiting"><a href="#"><img src="images/0.jpg" /></a></li>   <li class="no0"><a href="#"><img src="images/1.jpg" /></a></li>   <li class="no1"><a href="#"><img src="images/2.jpg" /></a></li>   <li class="no2"><a href="#"><img src="images/3.jpg" /></a></li>   <li class="no3"><a href="#"><img src="images/4.jpg" /></a></li>   <li class="no4"><a href="#"><img src="images/5.jpg" /></a></li>   <li class="waiting"><a href="#"><img src="images/6.jpg" /></a></li>   <li class="waiting"><a href="#"><img src="images/7.jpg" /></a></li>   <li class="waiting"><a href="#"><img src="images/8.jpg" /></a></li> </ul> 

執行完以上代碼后,剖析圖如下:

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国语自产精品视频在线看| 国产精品久久久精品| 欧美激情亚洲另类| 日韩性xxxx爱| 91精品视频大全| 久久大大胆人体| 精品视频久久久久久| 国产精品久久久久久久久免费| 日韩美女视频免费在线观看| 亚洲激情视频在线播放| 国产+人+亚洲| 91老司机精品视频| 福利微拍一区二区| 国产一区二区精品丝袜| 亚洲色无码播放| 精品久久久久久久久久| 日韩视频永久免费观看| 国产欧美久久久久久| 国产精品香蕉在线观看| 欧美日韩成人免费| 日本精品免费一区二区三区| 亚洲精品一区二区在线| 国产在线播放不卡| 亚洲精品av在线| 精品无码久久久久久国产| 日韩国产高清污视频在线观看| 久久久久久国产三级电影| 亚洲精品mp4| 国产最新精品视频| 国产精品久久久久久久久久东京| 亚洲视频一区二区三区| 欧美日韩亚洲精品一区二区三区| 92版电视剧仙鹤神针在线观看| 亚洲色图13p| 一区二区三欧美| 北条麻妃99精品青青久久| 亚洲成人性视频| 中文字幕久久精品| 日韩免费视频在线观看| 欧美色欧美亚洲高清在线视频| 精品国产美女在线| 中文日韩电影网站| 97色在线视频| 亚洲激情中文字幕| 欧美视频在线免费| 亚洲综合在线播放| 国产精品成人一区| 精品日本美女福利在线观看| 亚洲奶大毛多的老太婆| 中日韩美女免费视频网站在线观看| 久久国产精彩视频| 精品亚洲一区二区三区| 91免费人成网站在线观看18| 久久精品久久精品亚洲人| 97视频免费在线看| 日韩最新中文字幕电影免费看| 欧美一级淫片videoshd| 中文字幕亚洲色图| 久久久999精品| 国产午夜精品免费一区二区三区| 国内精品久久影院| 国产精品偷伦免费视频观看的| 91久久精品美女高潮| 久久99国产精品自在自在app| 在线a欧美视频| 91久久久久久久久久久| 国产精品久久77777| 日韩精品免费综合视频在线播放| 亚洲天堂视频在线观看| 欧美大尺度在线观看| 国产精品入口夜色视频大尺度| 国产乱人伦真实精品视频| 91视频免费网站| 一区二区欧美久久| 日韩精品极品毛片系列视频| 国内精品久久久久久久久| 欧美极品第一页| 亚洲日本aⅴ片在线观看香蕉| 日韩欧美精品免费在线| 久久夜色精品国产亚洲aⅴ| 97精品一区二区视频在线观看| 成人黄色生活片| 日韩成人小视频| 尤物tv国产一区| 精品久久久av| 欧美网站在线观看| 精品动漫一区二区三区| 国产亚洲欧美视频| 日韩中文字幕免费看| 日韩经典一区二区三区| 中文在线不卡视频| 国产精品r级在线| 精品一区二区三区四区在线| 久久人人爽人人爽人人片av高清| 久久免费在线观看| 欧美夜福利tv在线| 国产欧美一区二区三区久久人妖| 最新日韩中文字幕| 91免费精品视频| 成人免费观看49www在线观看| 国产日韩专区在线| 国产精品久久久久久久久借妻| 欧美成人合集magnet| 久久大大胆人体| 精品国产一区二区三区四区在线观看| 亚洲国产天堂久久综合| 国产97在线观看| 亚洲色图日韩av| 久久夜色精品国产亚洲aⅴ| 成人在线免费观看视视频| 久久久久久久久久久久久久久久久久av| 欧美激情精品久久久久久| 久热精品视频在线观看| 久久久久久久一区二区三区| 日韩电影中文字幕一区| 亚洲网站在线观看| 亚洲精品国产精品久久清纯直播| 日韩精品在线第一页| 日韩在线观看免费av| 97人洗澡人人免费公开视频碰碰碰| 中文字幕亚洲一区二区三区五十路| 国产裸体写真av一区二区| 伊人久久精品视频| 狠狠久久亚洲欧美专区| 国产精品久久精品| 欧美亚洲国产精品| 久久福利视频网| 全球成人中文在线| 性欧美亚洲xxxx乳在线观看| 亚洲国产精品成人va在线观看| 91热福利电影| 国产精品免费视频xxxx| 欧美国产亚洲视频| 欧美日韩中文字幕日韩欧美| 亚洲美女免费精品视频在线观看| 91人人爽人人爽人人精88v| 久久精品91久久久久久再现| 亚洲第一区中文字幕| 深夜福利日韩在线看| 精品久久香蕉国产线看观看亚洲| 日韩一区二区福利| 国产视频精品一区二区三区| 最近的2019中文字幕免费一页| 久久久久99精品久久久久| 色爱av美腿丝袜综合粉嫩av| 久久天堂av综合合色| 欧美福利在线观看| 日韩av在线影视| 在线视频国产日韩| 国内精品在线一区| 欧美第一黄网免费网站| 全色精品综合影院| 国产女精品视频网站免费| 日韩最新中文字幕电影免费看| 欧美国产日韩免费| 久久久91精品国产| 国外成人在线播放| 欧美黑人视频一区| 欧美精品性视频| 亚洲欧洲美洲在线综合| 日韩欧美中文免费| 久久久久久国产精品三级玉女聊斋| 欧美极品第一页| 欧美在线xxx|