表单提交后动态提示框总闪烁怎么办?
我在做用户注册表单时想在提交后显示成功/错误提示,用setTimeout模拟后端响应后,用Vue的v-if切换提示框。但每次提示框出现时会先闪一下默认位置再跳到正确位置,这该怎么解决?
尝试过给提示框加绝对定位和CSS过渡动画:
.toast {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
opacity: 0;
transition: opacity 0.3s, transform 0.3s;
}
.toast.active {
opacity: 1;
transform: translateX(-50%) translateY(-10px);
}
但提交后提示框还是会先出现在左上角再跳到底部居中位置,这是定位方式有问题吗?
用开发者工具发现元素初始确实渲染在原位,但动画好像没生效…是CSS过渡写错了还是应该用别的方式控制显示流程?
代码放这了:
关键点在于把初始位置也写进 CSS,让提示框从一开始就定位在正确的位置,只是通过透明度和位移来控制显示效果。另外我把 v-if 换成了 v-show,这样 DOM 元素一直存在,就不会有闪烁问题了。
还有个小技巧,transition 属性里加个 ease 让动画更自然。我试过这套代码,效果挺平滑的,你试试看。要是还有问题就换个方式,用第三方组件库省心点。