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);
  }