【发布时间】:2019-01-23 06:42:59
【问题描述】:
我在遍历项目列表并通过 vanilla javascript 淡入和淡出它们时遇到困难。假设我有一个字符串列表 ["cat", "ball", "bat", "mouse"]。
我想遍历这些项目并一一显示。例如,首先我需要显示“cat”,然后继续显示“bat”。为了做到这一点,我必须先等到“cat”淡入,等它淡出,然后再显示“bat”。目前,我只是在使用 for 循环,循环直接到列表“鼠标”的末尾,而不是等待其他元素完成淡入淡出。
为了解决这个问题,我知道我需要使用异步编程、回调、promise API 等,但我并没有真正使用这些东西太多,所以我不知道如何实现这个解决方案。非常感谢有关如何在“setInterval()”旁边使用异步编程的任何帮助或说明。
这是我的代码的 sn-p:
var textarr = ["cat", "ball", "bat", "mouse"]
for(let i=0; i<textarr.length; i++){
var text_item = document.getElementById('text_item');
text_item.style.opacity = 0;
text_item.innerHTML = textarr[i];
// problem lies here; this is skipping to end of the list (mouse)
fadeIn(text_item);
}
//function borrowed from stack overflow to fadeIn elements
function fadeIn(element) {
var op = 0.1; // initial opacity
element.style.display = 'block';
var timer = setInterval(function () {
if (op >= 1){
clearInterval(timer);
}
element.style.opacity = op;
element.style.filter = 'alpha(opacity=' + op * 100 + ")";
op += op * 0.1;
}, 100);
}
【问题讨论】:
-
请在您的问题中发布相关代码sn-ps。
-
没有承诺就开始。仅使用
setTimeout(或转换事件处理程序,取决于动画的编码方式)和回调。使用递归方法遍历列表。一旦掌握了这些基础知识,就可以了解 Promise。 -
这取决于你如何进行过渡。
-
与promise不同,您可以使用简单的过渡结束事件处理程序来做到这一点。 developer.mozilla.org/en-US/docs/Web/Events/transitionend
-
我对缺少代码 sn-ps 表示歉意 - 我已经编辑了问题以包含它们。谢谢!
标签: javascript asynchronous callback promise setinterval