从具有延迟的开关中断:setTimeout+Break=语法错误

Break out from a switch with a delay: setTimeout + break = syntax error

本文关键字:setTimeout+Break 语法 错误 中断 开关 延迟      更新时间:2023-09-26

我正在尝试制作一些依赖CSS转换的动画,添加和删除类:(现在是一些代码,然后是一些进一步的解释(

/*variables are defined outside this function*/
function effect() {
    switch(activeWall.attr("animation-order")) {
        case "incremental":
            if(!j) { /*if first box*/
                boxes.eq(j).addClass("hovered");
                ++j;
                break;
            };
            if (j == defaultOrder.lenght) { /*if last box*/
                boxes.eq(j).removeClass("hovered");
                setTimeout(break, 1000); /*syntax error*/
            };
            /*any other*/
            boxes.eq(j).addClass("hovered");
            boxes.eq(j-1).removeClass("hovered");
            ++j;
            break;
        default:
            if(!i) { /*if first box*/
                boxes.eq(defaultOrder[i]).addClass("hovered");
                ++i;
                break;
            };
            if (i == defaultOrder.lenght) { /*if last box*/
                boxes.eq(defaultOrder[i]).removeClass("hovered");
                setTimeout(break, 1000); /*syntax error*/
            };
            /*any other*/
            boxes.eq(defaultOrder[i]).addClass("hovered");
            boxes.eq(defaultOrder[i-1]).removeClass("hovered");
            ++i;
            break;
    };
};

hovered类中的转换让用户在最后一个框的情况下看到它,在发生其他事情之前,我需要等待,然后用break退出switch。在移除类之后放置像boxes.eq(i).removeClass("hovered").delay(n)这样的延迟将是无效的,因为下一个jQuery动画将应用于其他元素。我原以为把breaksetTimeout放在一起就可以了,但我遇到了语法错误。

那么,我如何才能暂停脚本的流程,等待过渡生效所需的时间呢?我使用setTimeout不好吗?

不能使用setTimeout()调用break

尝试以下更改:

注意length的拼写,通常应该与length - 1进行比较以获得最后一个元素的索引

if (j == (defaultOrder.length-1)) { /*if last box*/
  setTimeout((function() {
    var j_ = j; //keep j during timeout
    return function() {
      boxes.eq(j_).removeClass("hovered");
    };
  })(), 1000);
  break;
}

default情况的相应修改为:

if (i == (defaultOrder.length-1)) { /*if last box*/
  setTimeout((function() {
    var i_ = i; //keep i during timeout
    return function() {
      boxes.eq(defaultOrder[i_]).removeClass("hovered");
    };
  })(), 1000);
  break;
}