javascript - 想使用 CSS 过渡来移除孩子
问题描述
我正在尝试仅使用 Javascript 构建一个待办事项列表应用程序(尚未学习 Jquery 等)。当用户单击指示任务完成的复选框时,我希望 li 元素通过 CSS 过渡淡出,然后让下一个 li 元素跳转到列表顶部。现在发生的事情是,当我使用 removeChild 时,CSS 过渡被忽略,但下一个 li 项目跳到列表顶部没有问题。当我不使用 removeChild 并通过 CSS 转换让 li 淡出时,下一个 li 不会跳到顶部或变得非常不稳定。如何删除选中的 li 元素,同时保持过渡并确保下一个 li 顺利进入列表顶部?
这是我的 CSS 淡入淡出效果:
.finished {
animation-name: fadeaway;
animation-duration: 3s;
animation-fill-mode: forwards;
}
@keyframes fadeaway {
0% {
opacity: 1;
}
50% {
opacity: 0.5;
}
100% {
opacity: 0;
}
}
这是我的 JS 代码 removeChild 并让下一个 li 跳转到顶部:
ul.addEventListener('change', (e) => {
let chbx = event.target;
let checked = chbx.checked;
let divcheck = chbx.parentNode;
if (checked) {
divcheck.className = "finished";
}
ul.removeChild(divcheck);
});
ul.addEventListener('change', moveup);
function moveup() {
let divcheckjr = document.querySelector(".finished");
let prevLIjr = divcheckjr.previousElement;
ul.insertBefore(divcheckjr, prevLIjr);
}
这是我的代码尝试使用 CSS 转换而不是 removeChild 来做同样的事情(我向选中的元素添加了一个类名以触发 CSS)
ul.addEventListener('change', (e) => {
let chbx = event.target;
let checked = chbx.checked;
let divcheck = chbx.parentNode;
if (checked) {
divcheck.className = "finished";
} else {
divcheck.className = "";
}
);
(e) => {
let chbx = event.target;
let checked = chbx.checked;
let divcheck = chbx.parentNode;
let prevLI = divcheck.previousElementSibling;
ul.insertBefore(divcheck, prevLI);
}
});
解决方案
推荐阅读
- c# - 如何使用 xbap 应用程序关闭 IE 选项卡
- cookies - HapiJS Samesite 配置 + Cloudflare (DNS)
- regex - 使用正则表达式查找没有 PHPDoc 的 PHP 中的所有方法
- linux-kernel - getnstimeofday 返回的最大值
- python - 如何处理包含在具有不同大小的元素列表中的数据来训练 LSTM?
- c++ - 为什么析构函数中的异常会在 msvc 2017 中的 c++17 中创建内存泄漏
- c# - 以编程方式填充分配给对象的属性集定义中的数据
- swift - 从非父视图控制器分配委托
- reactjs - 滚动时反应导航切换标签栏
- piranha-cms - 获取/设置块上的列表字段