【发布时间】:2019-10-17 11:20:17
【问题描述】:
我有一个消息元素,我在函数中添加到我的页面:
const markup = `<div class="todolist__message todolist__message${status? "--ok":"--err"}">${msg}</div>`;
elements.tdl.insertAdjacentHTML('beforeend', markup);
if(fade) {
const message = document.querySelector('.todolist__message');
// Change the message opacity
message.style.opacity = '0';
// Remove the message element
setTimeout(() => {
document.querySelector('.todolist__message').parentElement.removeChild(message);
}, 2000);
}
然后我添加 css 属性:
opacity: 1;
transition: opacity 1s;
我不明白为什么,当我将消息不透明度更改为 0 时,过渡似乎不起作用并且元素立即消失?
我必须重写代码,将样式更改放在 setTimeout 中,并添加一个额外的 setTimeout 用于元素移除:
const markup = `
<div class="todolist__message todolist__message${status? "--ok":"--err"}">${msg}</div>
`;
elements.tdl.insertAdjacentHTML('beforeend', markup);
if(fade) {
setTimeout(() => {
const message = document.querySelector('.todolist__message');
// Change the message opacity
message.style.opacity = '0';
// Remove the message
setTimeout(() => document.querySelector('.todolist__message').parentElement.removeChild(message), 2000);
}, 2000);
}
有人介意解释为什么第一个代码块会导致消息立即消失,而不是应用 css 转换吗?
谢谢
** 请参阅下面的答案,了解动画完成后删除元素的方法。
【问题讨论】:
-
尝试添加类而不是更新样式。
-
是的,干杯,这可能比 2x 超时要好,但仍然对为什么上面没有按我预期的那样工作感兴趣?
-
您的代码正在运行,请参阅我的回答。 PS:你把这个
transition规则放在哪里了,你能用选择器显示你的css吗?
标签: javascript css css-animations