[JQuery]用InsertAfter實現圖片走馬燈展示效果


寫在前面

最近一個搞美工的朋友讓我給他寫一個圖片輪播的特效。

需求:

  1. 圖片向左循環滾動。
  2. 圖片滾動到中間高亮顯示,並在下方顯示照片人物對應的信息。
  3. 鼠標懸停止滾動。
  4. 鼠標離開開始滾動。
  5. 單擊圖片,圖片移到中間並高亮顯示。

分析

思考一

首先想到的是圖片輪播的插件,找了幾款,並不是太滿意,就放棄了。

思考二

然后想到使用jquery的animate()方法,對這個不熟悉,也放棄了。

jQuery animate() 方法用於創建自定義動畫。

語法

$(selector).animate({params},speed,callback);

必需的 params 參數定義形成動畫的 CSS 屬性。
可選的 speed 參數規定效果的時長。它可以取以下值:"slow"、"fast" 或毫秒。
可選的 callback 參數是動畫完成后所執行的函數名稱。
下面的例子演示 animate() 方法的簡單應用;它把 <div> 元素移動到左邊,直到 left 屬性等於 250 像素為止:

實例

$("button").click(function(){
  $("div").animate({left:'250px'});
});

說明:默認地,所有 HTML 元素都有一個靜態位置,且無法移動。
如需對位置進行操作,要記得首先把元素的 CSS position 屬性設置為 relative、fixed 或 absolute!

詳細參數說明:http://www.w3school.com.cn/jquery/jquery_animate.asp

 由上可以知道animate方法對操作位移比較方便(也許對該方法了解的不夠深入),而需求需要對中間高亮顯示的照片並在下方顯示對應人物的信息。

 思考三

 該方式有點類似走馬燈的效果,另外想到了jquery中常用的文檔操作的方法:append()、appendTo()、before()、insertAfter()、insertBefore()

 而這些方法在使用時,針對元素本身是否已經存在,有不同的效果,比如動態創建的元素,使用文檔操作的方法是在目標對象之前(之后)追加(插入),而對於已經存在的元素,則會出現移動的效果。

 所以,想到了,每移動一個圖片,將最前面的那個圖片插入在最后一張圖片后面,然后使用定時器不間斷的移動就可以滿足上面的需求了,有了這些考慮,就開始動手實踐了。

實踐

朋友給的css

 1 @charset "utf-8";
 2 /* CSS Document */
 3 *{margin:0; padding:0; list-style:none;}
 4 body{margin:0; padding:0; font-family:"宋體"; font-size:14px; color:#3c3d43;  background:#e2e2d7;}
 5 a:link{ text-decoration:none;}
 6 /*輪播圖片的樣式*/
 7 .teacher{width:1000px; height:250px; margin:0 auto; background:url(../imges/Jshi1.png);position:relative;}
 8 .teach_top{width:120px; height:100px; float:right; background:#3b3f8c; margin-top:7px; margin-right:24px;}
 9 .teach_top p{ color:#fff; font-weight:bold; text-align:center;}
10 .Teac{width:950px; height:100px; position:absolute; margin-top:50px; margin-left:30px;}
11 .Teac ul li:hover{}
12 .Teac ul li{ float:left; width:99px; height:100px; margin-left:5px; background:#000;}
13 .Zzhao img{width:100px; height:100px; filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: 0.5; border:0; list-style:none;}
14 .Jjie{width:240px; height:60px; position:absolute; margin-top:120px; margin-left:350px;}
15 .T1{ font-family:"宋體"; font-size:20px; font-weight:bold; color:#011b12; margin-left:27px;}
16 .T2{font-family:"宋體"; font-size:12px; color:#7b7c7c;}
17 .T3{font-family:"宋體"; font-size:12px; color:#7b7c7c; text-align:center; margin-top:6px; line-height:150%;}
18 .Zzhao_cent img{width:100px; height:100px; border:0; list-style:none;}
css

靜態頁Index.html

  1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5     <title>圖片輪播</title>
  6     <link href="Css/Style.css" rel="stylesheet" type="text/css" />
  7     <script src="Script/jquery-1.10.2.js"></script>
  8 
  9     <script type="text/javascript">
 10         var Tearchers = [{
 11             "id": "1",
 12             "T1": "萌萌雨1",
 13             "T2": "上海復旦大學碩士學位1",
 14             "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師1",
 15             "imgsrc": "imges/teach_1.png"
 16         },
 17          {
 18              "id": "2",
 19              "T1": "萌萌雨2",
 20              "T2": "上海復旦大學碩士學位2",
 21              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師2",
 22              "imgsrc": "imges/teach_2.png"
 23 
 24          },
 25          {
 26              "id": "3",
 27              "T1": "萌萌雨3",
 28              "T2": "上海復旦大學碩士學位3",
 29              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師3",
 30              "imgsrc": "imges/teach_3.png"
 31          }, {
 32              "id": "4",
 33              "T1": "萌萌雨4",
 34              "T2": "上海復旦大學碩士學位4",
 35              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師4",
 36              "imgsrc": "imges/teach_4.png"
 37          }, {
 38              "id": "5",
 39              "T1": "萌萌雨5",
 40              "T2": "上海復旦大學碩士學位5",
 41              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師5",
 42              "imgsrc": "imges/teach_5.png"
 43          }
 44          , {
 45              "id": "6",
 46              "T1": "萌萌雨6",
 47              "T2": "上海復旦大學碩士學位6",
 48              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師6",
 49              "imgsrc": "imges/teach_6.png"
 50 
 51          }, {
 52              "id": "7",
 53              "T1": "萌萌雨7",
 54              "T2": "上海復旦大學碩士學位7",
 55              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師7",
 56              "imgsrc": "imges/teach_7.png"
 57 
 58          }, {
 59              "id": "8",
 60              "T1": "萌萌雨8",
 61              "T2": "上海復旦大學碩士學位8",
 62              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師8",
 63              "imgsrc": "imges/teach_8.png"
 64 
 65          }, {
 66              "id": "9",
 67              "T1": "萌萌雨9",
 68              "T2": "上海復旦大學碩士學位9",
 69              "T3": "追求完美與一身的現代化教師女性,才華橫溢一表人才,優秀教師9",
 70              "imgsrc": "imges/teach_9.png"
 71 
 72          },
 73         ];
 74         //滾動圖片對象
 75         var srcollImages = {
 76             //將第一個li插在最后一個ul之后
 77             firstInsertAfterLast: function () {
 78                 $("ul li:first").insertAfter($("ul li:last"));
 79             },
 80             /*
 81                 獲得高亮顯示的li
 82                 $result:獲得高亮的li並將高亮顯示的li對象返回
 83               */
 84             getHightLightLi: function ($container) {
 85                 var $lis = $("ul li", $container);
 86                 var $result = null;
 87                 $lis.each(function (index, element) {
 88                     if ($(this).attr("class") == "Zzhao_cent") {
 89                         $result = $(element);
 90                         $.each(Tearchers, function (index) {
 91                             //當前對象
 92                             var teacher = this;
 93                             if ($result.find("img").attr("src") == teacher.imgsrc) {
 94                                 //因為索引是從0開始,為了讓信息和照片對應所做的處理
 95                                 index = index + 1;
 96                                 //對最后一張圖片的處理
 97                                 if (index > (Tearchers.length - 1)) {
 98                                     teacher = Tearchers[0];
 99                                 } else {
100                                     teacher = Tearchers[index];
101                                 }
102                                 //將信息寫入下面的span中
103                                 $(".T1").html(teacher.T1);
104                                 $(".T2").html(teacher.T2);
105                                 $(".T3").html(teacher.T3);
106                             }
107                         })
108                     }
109                 });
110                 return $result;
111             }
112         };
113         $(function () {
114             //開啟定時器
115             var timerHandl = timerScroll();
116             //鼠標懸停在li和離開li的處理,單擊li后的處理
117             $("ul li").hover(function () {
118                 //停止定時器
119                 clearInterval(timerHandl);
120             }, function () {
121                 //保持句柄
122                 timerHandl = timerScroll();
123             })
124             /*
125             在滾動的時,單擊li並將其移動到中間高亮顯示的處理方法
126             timerHandl:單擊停止計時器所需的計時器句柄
127         */
128             $("ul li").each(function () {
129                 $(this).click(function () {
130                     var selfclik = $(this);
131                     clearInterval(timerHandl);
132                     //只對普通的照片進行處理,高亮居中的照片不再處理
133                     if ($(this).hasClass("Zzhao")) {
134                         //index()方法用來獲取jquery對象的位置索引
135                         var currentIndex = $(this).index();
136                         //高亮圖片的索引位置,以中間高亮圖片為原點
137                         var hightIndex = $(".Zzhao_cent").index();
138                         //currentIndex > hightIndex說明單擊的圖片在高亮圖片右邊
139                         if (currentIndex > hightIndex) {
140                             //移動的步數
141                             var step = currentIndex - hightIndex;
142                             $(this).removeClass("Zzhao").addClass("Zzhao_cent");
143                             $(this).siblings().removeClass("Zzhao").removeClass("Zzhao_cent").addClass("Zzhao");
144                             //移動多少次
145                             for (var i = 0; i < step; i++) {
146                                 srcollImages.firstInsertAfterLast();
147                             }
148 
149                         } else {
150                             //中間高亮圖片之前的單擊處理
151                             //移動的步數
152                             var step = currentIndex + hightIndex + 1;
153                             $(this).removeClass("Zzhao").addClass("Zzhao_cent");
154                             $(this).siblings().removeClass("Zzhao").removeClass("Zzhao_cent").addClass("Zzhao");
155                             //移動多少次
156                             for (var i = 0; i < step; i++) {
157                                 srcollImages.firstInsertAfterLast();
158                             }
159                         }
160                         //當單擊某個圖片時,將對應的信息在下面的span中顯示
161                         for (var i = 0; i < Tearchers.length; i++) {
162                             var teacher = Tearchers[i];
163                             if (teacher) {
164                                 if (selfclik.find("img").attr("src") == teacher.imgsrc) {
165                                     $(".T1").html(teacher.T1);
166                                     $(".T2").html(teacher.T2);
167                                     $(".T3").html(teacher.T3);
168                                 }
169                             }
170 
171                         }
172                     }
173                 });
174             });
175         });
176 
177 
178         /*
179             定時器開始,圖片循環滾動
180             timerHandl:定時器句柄,用來控制開啟和停止*/
181         function timerScroll() {
182             var timerHandl = setInterval(function () {
183                 //獲得當前高亮的li
184                 var $hightli = srcollImages.getHightLightLi($(".Teac"));
185                 //將第一個li插入最后一個li后面
186                 srcollImages.firstInsertAfterLast();
187                 //移除高亮的li的Zzhao_cent類,添加遮罩類Zzhao,緊跟的下一個li移除遮罩類Zzhao,添加高亮類Zzhao_cent
188                 $hightli.removeClass("Zzhao_cent").addClass("Zzhao").next().removeClass("Zzhao").addClass("Zzhao_cent");
189 
190             }, 1000);
191             return timerHandl;
192         }
193     </script>
194 </head>
195 
196 <body>
197     <div class="teacher">
198         <div class="Teac">
199             <ul>
200                 <li class="Zzhao">
201                     <a href="#"><img src="imges/teach_1.png" /></a>
202                 </li>
203                 <li class="Zzhao">
204                     <a href="#"><img src="imges/teach_2.png" /></a>
205                 </li>
206                 <li class="Zzhao">
207                     <a href="#"><img src="imges/teach_3.png" /></a>
208                 </li>
209                 <li class="Zzhao">
210                     <a href="#"><img src="imges/teach_4.png" /></a>
211                 </li>
212                 <li class="Zzhao_cent">
213                     <a href="#"><img src="imges/teach_5.png" /></a>
214                 </li>
215                 <li class="Zzhao">
216                     <a href="#"><img src="imges/teach_6.png" /></a>
217                 </li>
218                 <li class="Zzhao">
219                     <a href="#"><img src="imges/teach_7.png" /></a>
220                 </li>
221                 <li class="Zzhao">
222                     <a href="#"><img src="imges/teach_8.png" /></a>
223                 </li>
224                 <li class="Zzhao">
225                     <a href="#"><img src="imges/teach_9.png" /></a>
226                 </li>
227             </ul>
228             <div class="Jjie">
229                 <span class="T1">萌萌雨5</span>
230                 <span class="T2">上海復旦大學碩士學位5</span></br>
231                 <p class="T3">
232                     追求完美與一身的現代化教師女性,才華橫溢
233                     一表人才,優秀教師5
234                 </p>
235             </div>
236         </div>
237     </div>
238     <script type="text/javascript">
239 
240     </script>
241 
242 </body>
243 </html>
Index.html

 效果

源碼下載:http://files.cnblogs.com/wolf-sun/Scroll.rar

總結

在使用jquery或者js實現該功能的時候,也沒想着讓代碼多優雅,就是一個目標先實現該功能再說,然后再使用面向對象的思想慢慢的優化將里面亂糟糟的東西抽象出來,也想過弄一個插件來着,可惜由於功底有限也就放棄了,插件的方式還得再研究研究。實現的方式不唯一,這里也是記錄一下自己的實現方式。在實現該功能中,對jquery的文檔操作,animate方法,選擇器,以及this的作用域問題又復習了一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM