Tôi có một chút phức tạp hơn một chút. Tôi có năm li và một lớp "hoạt động".Cách thực hiện trong câu lệnh for, "i" để bắt đầu từ một giá trị cho đến khi chu kỳ kết thúc và chu kỳ thứ hai bắt đầu từ 1
Chỉ một trong những người trong số họ có lớp "hoạt động". Cái đó sẽ có màu đỏ.
Khi tôi nhấp vào liên kết "Tiếp theo", lớp "hoạt động" sẽ được thêm vào li tiếp theo.
Khi tôi nhấp vào liên kết "Trước", lớp "hoạt động" sẽ được thêm vào li trước đó.
Khi tôi nhấp vào một li, lớp "hoạt động" sẽ chỉ được thêm vào li được nhấp.
Những suy nghĩ đó hoạt động, nhưng có sự cố với hàm loop().
Tôi cần lớp "hoạt động" để chuyển tự động từ một li sang li kế tiếp theo. Nó hoạt động, nhưng mọi thứ đang phát điên khi tôi nhấp vào liên kết tiếp theo, liên kết trước hoặc li.
Tất cả 3 yếu tố đó: vòng lặp, liên kết tiếp theo và nhấp vào li sẽ hoạt động hoàn hảo cùng nhau.
Nếu tôi nhấp vào liên kết tiếp theo và lớp "đang hoạt động" được chuyển từ li thứ hai sang li thứ ba, tôi cần báo cáo "for" để tiếp tục từ li thứ ba để di chuyển lớp và tiếp tục chu kỳ .
Tôi có thể cố gắng lấy "i" đó cho từ nr-1 (li được nhấp vào) không phải từ 0, cho (var i = nr-1; i < functions.length; i ++), nhưng sau chu kỳ đầu tiên của lớp "hoạt động" nó sẽ bắt đầu từ 0 một lần nữa, nhưng nó bắt đầu từ nr-1, đó là bình thường.
Vòng lặp hoạt động, sự cố xuất hiện khi tôi nhấp vào liên kết li hoặc liên kết trước đó.
$(document).ready(function() {
var f1 = function() {
$(".1").addClass("active").siblings("li").removeClass("active")
};
f2 = function() {
$(".2").addClass("active").siblings("li").removeClass("active")
};
f3 = function() {
$(".3").addClass("active").siblings("li").removeClass("active")
};
f4 = function() {
$(".4").addClass("active").siblings("li").removeClass("active")
};
f5 = function() {
$(".5").addClass("active").siblings("li").removeClass("active")
};
var functions = [f1, f2, f3, f4, f5];
var y = functions.length;
var loop = function() {
for (var i = 0; i < functions.length; i++) {
(function (i) {
setTimeout(function() {
functions[i]();
}, 1000 * i);
})(i);
}
setTimeout(loop, (1000 * (functions.length)));
}
loop();
$("ol li ").click(function() {
var nr = $(this).data("number");
functions[nr - 1]();
});
$(".flex-next").click(function() {
var nr = $("ol").find("li.active").data("number");
if (nr == y) {
functions[0]();
} else {
functions[nr]();
}
});
$(".flex-prev").click(function() {
var nr = $("ol").find("li.active").data("number");
//y = functions.length;
if (nr == 1) {
functions[y - 1]();
} else {
functions[nr - 2]();
}
});
});
@import url(http://reset5.googlecode.com/hg/reset.min.css);
ol li {
width:50px;
height:50px;
background-color:blue;
float:left;
margin:10px;
}
ul li a {
text-decoration: none;
width:100px;
}
.active {
background-color:red;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ol>
<li data-number="1" class="1 active ">
<a href="#"></a> \t
</li>
<li data-number="2" class="2">
<a href="#"></a>
</li>
<li data-number="3" class="3">
<a href="#"></a>
</li>
<li data-number="4" class="4">
<a href="#"></a>
</li>
<li data-number="5" class="5">
<a href="#"></a>
</li>
</ol>
<ul class="flex-direction-nav">
<li>
<a class="flex-prev" href="javascript:void(0);">Previous</a>
</li>
<li>
<a class="flex-next" href="javascript:void(0);">Next</a>
</li>
</ul>
một điều tôi nhận thấy ngay lập tức là var f1 được định nghĩa là một biến bên trong document.ready, nhưng bạn tách riêng tất cả f2, f3, f4, f5 bằng dấu ";" thay vì một ",", vì vậy f2, f3, f4, f5 được định nghĩa là biến toàn cầu! Chỉ cần một đầu lên, hoặc là xác định nhiều biến với viết tắt như "var f1, f2, f3;" hoặc riêng lẻ như "var f1; var f2; var f3;" =) – NachoDawg
Vì vậy, có vẻ như bạn cần phải dừng thời gian chờ khi một cái gì đó được nhấp và khởi động lại từ thời điểm đó. Xem https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout. Ngoài ra, tôi nghĩ rằng loop() phương pháp trông khá fishy. Có vẻ như bạn đang thiết lập 5 setTimeouts khác nhau trong vòng lặp đó. Tôi cũng nghĩ rằng setInterval() có thể thích hợp hơn ở đây. – Jeff