$(function () { $.getJSON("data.json", function (data) { var html = ""; var navi = ""; //宣告空的圓點變數 for (var i = 0; i < data.length; i++) { html += "<div>"; html += "<a href=\"" + data[i][1] + "\" target=\"_blank\"><img src=\"" + data[i][0] + "\"></a>"; html += "</div>" navi += "<span"; // 加入圓點 // 判斷是否為第一個圓點,加上active if (i == 0) { navi += " class=\"active\""; } navi += "></span>"; } $(".inbox").html(html); $(".navi").html(navi); //寫入html裡的navi $(".inbox>div").first().clone().appendTo($(".inbox")); var index = 0; //Next往後往下一張跑照片 functionrun() { if ($(".inbox").is(":animated")) return; $(".inbox").animate({ left: "-=500" }, function () { if (index >= data.length - 1) { index = -1; $(this).css("left", 0); } index++; dot(); }); } //Prev往前往上一張跑照片 functionback() { if ($(".inbox").is(":animated")) return; //拉出animate外執行,確保數值計算正確回到第一張 if (index <= 0) { index = data.length; $(".inbox").css("left", index * -500); } $(".inbox").animate({ left: "+=500" }, function () { //改+數才能往右移動 index--; //遞減 dot(); }); } var sid = setInterval(run, 2000); //設定定時器 $(".inbox,.navi,.next,.prev").hover(function () { //增加移停選項 clearInterval(sid); }, function () { sid = setInterval(run, 2000); }); //增加圓點函式 functiondot() { $(".navi>span.active").removeClass(); $(".navi>span").eq(index).addClass("active"); } //點擊部分 $(".next").click(run); $(".prev").click(back); $(".navi>span").click(function () { index = $(this).index(); //宣告變數為目前點擊的索引數 $(".inbox").animate({ left: index * -500 }, dot); //點擊圓點移動並執行更換已選到的黑點 }); }); });
if (i == 0) { navi += " class=\"active\""; } 一開始用來判斷第一個圓點加上 active 的標籤 (為選取狀態)。 if ($(".inbox").is(":animated")) return; 在兩個 run 、 back 兩個函式加入,目的是判斷目前是否為 :animated (持續動作) 狀態,如果是就停止動作,因為如果一直按很多次,程式就會執行很多次,就算移到別的地方動作,還是會先執行完才會做其他動作,所以加入此語法,可以馬上取消動作進而執行其他動作。 $(".navi>span").eq(index).addClass("active"); 跳到索引數的 span 加上 active 的標籤 (為選取狀態)。