【发布时间】:2020-06-15 20:41:32
【问题描述】:
我有一个带有单击事件侦听器的按钮,它调用 2 个不同的函数。第一个函数通过添加一个触发 CSS 过渡到 opacity 0 的类来淡出 div,然后更改 innerHTML,然后删除该类并将 opacity 淡化回 1。
第二个函数创建和 img 元素,将其添加到 div 中,然后向 img 添加一个类,这是一个 CSS 缩放转换。所以它应该是这样的:点击 -> div 淡出 -> div 用新内容淡入 -> 图像出现并变大。
为了使其正常工作,所有这些事件都必须连续发生。我设法使它工作的唯一方法是使用 setTimeouts,这确实不是最好的方法。我已经尝试过承诺、transitionend 事件侦听器、requestAnimationFrame,但这些似乎都不起作用。要么 img 不加载,要么加载已经缩放并且不存在过渡。谁能帮我弄清楚如何设置这些事件,以便每个事件都在触发之前等待最后一个事件的完成?谢谢!
伪代码:
function resetDiv() {
const div = document.querySelector('#div');
div.classList.add('cssFadeout');
div.ontransitionend = () => {
div.innerHTML = `${text literal HTML stored in a variable}`;
div.classList.remove('fadeOut');
}
function generateImg() {
const newImg = document.createElement('img');
newImg.src = 'img.png';
newImg.id = 'newImg';
div.appendChild(newImg);
document.querySelector('#newImg').classList.add('cssScale')
}
button.addEventListener('click', (event) => {
event.preventDefault();
resetDiv();
generateImg();
});
【问题讨论】:
标签: javascript asynchronous transition