Javascript 使用setTimeout对循环进行反转
我有一个Javascript 使用setTimeout对循环进行反转,javascript,html,jquery,css,Javascript,Html,Jquery,Css,我有一个li,我想在鼠标悬停时设置动画 我尝试使用§(this.prevAll(“li”)获取前面的li项,然后使用JQuery更改样式 为此,我想获得前面项目的ID。我当前的代码如下所示: $("#somediv li").hover(function() { var object = $(this).prevAll("li"); var i; for (i = object.length - 1; i >= 0; i-
li
,我想在鼠标悬停时设置动画
我尝试使用§(this.prevAll(“li”)获取前面的li
项,然后使用JQuery更改样式
为此,我想获得前面项目的ID。我当前的代码如下所示:
$("#somediv li").hover(function()
{
var object = $(this).prevAll("li");
var i;
for (i = object.length - 1; i >= 0; i--) {
dowork(i);
}
function dowork(i) {
setTimeout(function() {
console.log(i);
$("#"+object[i].id+"").addClass("animateprogress");
}, 500 * i);
}
for循环的输出为5,4,3,2,1,0(取决于对象长度)。但超时输出会将其反转为0,1,2,3,4,5。我不知道为什么这么难。我只想以500毫秒的延迟输出5,4,3,2,1,0,以设计我以前的
li
元素。你必须区分你想要的延迟和你想要的对象索引。现在,这两个变量在函数中都是相同的变量i
,但它们应该有点相反
例如,你应该:
$("#somediv li").hover(function() {
var object = $(this).prevAll("li");
var i;
for (i = 0; i < object.length; i++) {
// pass a delay that increases with each iteration,
// and pass an index that decreases with each iteration:
dowork(500 * i, object.length - 1 - i);
}
function dowork(delay, index) {
setTimeout(function() {
console.log(index);
$("#"+object[index].id).addClass("animateprogress");
}, delay);
}
});
$(“#somediv li”).hover(函数(){
var object=$(this.prevAll(“li”);
var i;
对于(i=0;i
试试:
相反。您也可以使用这些代码
$("#somediv li").hover(function()
{
var object = $(this).prevAll("li");
var i;
for (i = object.length - 1; i >= 0; i--) {
dowork(i,(object.length-i)*500);
}
function dowork(i,d) {
setTimeout(function() {
console.log(i);
$("#"+object[i].id+"").addClass("animateprogress");
}, d);
}
它将给出你期望的结果
问题是关于延迟时间,您增加了更多的时间以获得更多的数字,这与您的期望相反谢谢,这就是我要找的。不客气;-)
$("#somediv li").hover(function()
{
var object = $(this).prevAll("li");
var i;
for (i = object.length - 1; i >= 0; i--) {
dowork(i,(object.length-i)*500);
}
function dowork(i,d) {
setTimeout(function() {
console.log(i);
$("#"+object[i].id+"").addClass("animateprogress");
}, d);
}