微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法简化多个 setTimeout 函数?

如何解决有没有办法简化多个 setTimeout 函数?

我有多个 setTimeout 函数,这让我的代码看起来又懒又长。有没有办法简化这个?

window.setTimeout(function () {
  $('.b1,.t5').addClass('active');
},3000);
window.setTimeout(function () {
  $('.b1,.t5').removeClass('active');
},3200);

window.setTimeout(function () {
  $('.b2,.t4').addClass('active');
},3100);
window.setTimeout(function () {
  $('.b2,.t4').removeClass('active');
},3300);

window.setTimeout(function () {
  $('.b3,.t3').addClass('active');
},3200);
window.setTimeout(function () {
  $('.b3,.t3').removeClass('active');
},3400);

window.setTimeout(function () {
  $('.b4,.t2').addClass('active');
},3300);
window.setTimeout(function () {
  $('.b4,.t2').removeClass('active');
},3500);

解决方法

由于所有类和超时都遵循简单的模式,因此您可以使用循环。

for (let i = 0; i < 4; i++) {
    setTimeout(function() {
        $(`.b${1+i},.t${5-i}`).addClass("active");
    },3000 + i*100);
    setTimeout(function() {
        $(`.b${1+i},.t${5-i}`).removeClass("active");
    },3200 + i*100);
}
,

您可以使用箭头函数将语句减少到一行:

window.setTimeout(() => $(".b1,.t5").addClass("active"),3000);
window.setTimeout(() => $(".b1,.t5").removeClass("active"),3200);
window.setTimeout(() => $(".b2,.t4").addClass("active"),3100);
window.setTimeout(() => $(".b2,.t4").removeClass("active"),3300);
window.setTimeout(() => $(".b3,.t3").addClass("active"),3200);
window.setTimeout(() => $(".b3,.t3").removeClass("active"),3400);
window.setTimeout(() => $(".b4,.t2").addClass("active"),3300);
window.setTimeout(() => $(".b4,.t2").removeClass("active"),3500);

但是因为这就像一个可重复的算法,所以你可以使用 for 循环:

for (let i = 0; i < 4; i++) {
    const element = $(`.b${i + 1},.t${5 - i}`);
    window.setTimeout(() => element.addClass('active'),3000 + i * 100);
    window.setTimeout(() => element.removeClass('active'),3200 + i * 100);
}
,

这个怎么样,


const actions = [
    { class: ".b1,.t5",classParam: "active",addTimeout: 3000,removeTimeout:3200 },{ class: ".b2,.t4",addTimeout: 3100,removeTimeout:3100 },{ class: ".b3,.t3",addTimeout: 3200,removeTimeout:3400 },{ class: ".b4,.t2",addTimeout: 3300,removeTimeout:3500 },];

for (let i = 0; i < actions.length; i++) {
    let el = actions[i];
    window.setTimeout(function () {
        $(el.class).addClass(el.classParam);
    },el.addTimeout);
    window.setTimeout(function () {
        $(el.class).addClass(el.classParam);
    },el.removeTimeout);
}

请告诉我您对此的看法。未来的课程可能会有所不同,并且可能不会遵循某种模式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。