javascript - 删除具有可见性的类时 Div 闪烁
问题描述
我正在构建的通知系统有问题。
一切正常,直到我的 javascript 被触发以从通知 div 中删除显示类。当类被移除时,div 的起始位置会短暂闪烁。
JS显示通知:
function showNotification() {
notificationRef.current.classList.add("nShow");
setTimeout(() => {
notificationRef.current.classList.remove("nShow");
}, 4000);
}
通知 CSS 具有通用的定位和样式visibility: hidden
以及top: 85px
设置。
nShow(显示通知的类):
.notification.nShow {
visibility: visible;
animation: fadeNotiIn 1s, fadeNotiOut 1s 3s;
}
@keyframes fadeNotiIn {
from {
top: 0;
opacity: 0;
}
to {
top: 85px;
opacity: 1;
}
}
@keyframes fadeNotiOut {
from {
top: 85px;
opacity: 1;
}
to {
top: 0;
opacity: 0;
}
}
似乎在 opacity: 1 之后设置了可见性:隐藏,因此在删除 show 类时会出现闪烁。
谢谢
解决方案
这是一个示例。我不建议你在animation
这里使用。在您计划的两个动画之间,您的元素会回到其默认状态,这让事情变得丑陋。
相反,我要做的是使用一个shorttransition
来平滑两种状态之间的东西,并继续通过JS处理它。
const notification = document.querySelector('.notification');
function startNotification() {
notification.classList.add("nShow");
setTimeout(() => {
notification.classList.remove("nShow");
}, 3000);
}
.notification {
opacity: 0;
position: absolute;
top: 0px;
transition: all 1s;
}
.notification.nShow {
top: 85px;
opacity: 1;
}
.root {
position: relative;
}
<button onclick="startNotification()">Start notification</button>
<div class="root">
<div class="notification">Hello</div>
</div>
正如在第一个版本中所说,我认为您不应该同时使用visibility
and opacity
,并且由于您已经在使用 opacity,所以让我们完全使用它。
推荐阅读
- authorization - 获取要分配给单个课程的令牌。- SAS 代币
- node.js - 将表单数据分配给 node.js 中的 postgres 池
- c# - “脚本不继承可以管理脚本的本机类。”
- static - 在未命名的命名空间中默认初始化的内置类型的对象是否具有明确定义的默认值?
- arduino - 降低覆盆子和arduino之间的电源时的串行通信问题
- swift - CoreLocation requestWhenInUseAuthorization 闪烁一秒钟然后消失,或者只是不显示
- javascript - 如何使一个对象移动到 p5js 中的另一个对象?
- python - 处理错误:套接字超时:超时
- jhipster - jhipster import jdl 导入JDL时出错
- react-native - React-Native [TypeError: null is not an object (evalating 'WebRTCModule.enumerateDevices')]