javascript - 如何在循环中延迟两个函数?
问题描述
我一直在寻找一整天,我无法弄清楚如何解决它。
我想做的就是遍历一堆元素并对每个元素执行以下操作:
- 添加班级
- 等待 3 秒
- 删除添加的类
- 转到下一个元素
我已经尝试了很多东西,现在我有了这个:
/* Avatars is an array of elements */
var i = 0
function testimonialCarousel(avatars){
const avatarsLen = avatars.length
avatars[i].classList.add("focused-avatar");
i++;
if (i > 0){
avatars[i-1].classList.remove("focused-avatar");
};
if (i < avatarsLen) {
setTimeout(testimonialCarousel.bind({}, avatars), 3000);
} else{
i = 0;
};
};
我知道这里有很多问题已经涵盖了单个函数的延迟,例如:如何在 JavaScript 循环中添加延迟?
这不是我的情况。我可以实现它,为每个元素添加一个 3s 间隔的类。我无法实现的是“删除类”步骤。
有人可以帮助我吗?
解决方案
好的,我已经找到了如何处理它:
for (let i = 0; i <= avatarsLen; i++){
setTimeout(function(){
if (i > 0){
avatars[i-1].classList.remove("focused-avatar");
};
if (i == avatarsLen) {
return testimonialCarousel();
};
avatars[i].classList.add("focused-avatar");
balloonMessage.style.opacity = 0;
balloonName.style.opacity = 0;
setTimeout(function(){
balloonMessage.innerHTML = balloonContent[i].message;
balloonName.innerHTML = "— " + balloonContent[i].name;
balloonMessage.style.opacity = 1;
balloonName.style.opacity = 1;
}, 650)
}, i*3000); /* <--- The solution lays here. */
推荐阅读
- javascript - 如何在列表的每个元素上添加Eventlstner,并访问它
- salesforce - 如何删除数组索引中除第 0 条记录之外的所有记录
- sqoop - 在 sqoop 中导入数据时删除列
- angular - Angular Injector,在 get 方法中有多个 InjectFlags
- azure - ARM AKS 必须定义至少一个系统池
- sql - 使用 Auto_inc 外键 MS SQL 插入两个表
- angular - 通过服务访问 Angular 组件
- xml - 使用 XSLT 将父元素添加到不同的 XML 同级
- python - AgglomerativeClustering,没有称为距离的属性_
- python-3.x - 追加不同维度的Dataframe