一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
问题一:关闭弹窗时遮罩层异常
现象
正常设置后,有时点击没有关闭对话框,而是先亮了,然后再次点击才成功关闭对话框。
el-dialog相关属性
close-on-click-modal,是否可以通过点击 modal 关闭 Dialog,默认为true。
原因
弹出对话框后发现,el-dialog__wrapper被设置了margin-top,导致上面部分没有dialog遮罩。
因此,点击上半部分会出现,先亮屏幕再次点击才能关闭,点击下半部分正常关闭的现象。
结果
改margin-top为padding-top即可。
问题二:el-dialog获取其中的dom节点方法
存在对话框
<el-dialog :visible.sync="dialogVisible">
<div id="devModel"></div>
</el-dialog>
问题代码
this.dialogVisible = true
let dom = document.getElementById('devModel')
console.log(dom) // 打印出dom为null
正确代码
this.dialogVisible = true
this.$nextTick(()=>{
let dom = document.getElementById('devModel')
console.log(dom)
})
必须使用nextTick,否则初次打开对话框时获取不到里面的dom节点。
问题三:双层el-dialog样式控制
关键代码
<html>
<head>
……
</head>
<body>
<div class="dept">
<el-dialog width="450px" :visible.sync="dialogVisible">
<el-button v-model="deptBox.parentId" @click="innerVisible = true" >{{deptBox.parentName}}</el-button>
<el-dialog width="400px" title="请选择上级部门" :visible.sync="innerVisible" append-to-body>
</el-dialog>
</el-dialog>
</div>
</body>
</html>
问题描述
通过设置.dept.el-dialog样式修改对话框样式,但是第二层对话框样式未正常设置,与第一层不一致。
原因
第二层dialog挂载到了body下,不在.dept样式控制下。
查询官方资料
append-to-body,Dialog 自身是否插入至 body 元素上。嵌套的 Dialog 必须指定该属性并赋值为 true。
但是实验证明,若设置了append-to-body导致主题切换无法控制,不设置也没啥问题啊。
去掉append-to-body属性后,又出现如下问题:
明显的第二层没有高亮,需要点击鼠标才高亮。
修改代码,将两个el-dialog并列放置,不要嵌套其中即可。
最终代码如下:
<div class="dept">
<el-dialog width="450px" :visible.sync="dialogVisible">
<el-button v-model="deptBox.parentId" @click="innerVisible = true" >{{deptBox.parentName}}</el-button>
</el-dialog>
<el-dialog width="400px" title="请选择上级部门" :visible.sync="innerVisible">
</el-dialog>
</div>
问题四:修改el-dialog动画导致在有threejs的页面闪动的问题
修改el-dialog动画代码如下:
/* dialog框显示和隐藏的动画效果 改浮现方式从左往右出现 */
@keyframes dialog-fade-in {
0% {
transform: translate3d(-100%, 0, 0);
opacity: 0;
}
100% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
}
@keyframes dialog-fade-out {
0% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
100% {
transform: translate3d(100%, 0, 0);
opacity: 0;
}
}
现象:
平时用着好好的,突然有一天,在3D场景中使用弹出框,出问题了,闪屏啊。
就是那种从左往右滑到中间突然闪现一下重新滑动。
这……
定位:
1、查看点击事件只触发了一次
2、并没有触发关闭事件
3、:visible.sync="dialogVisible"监控dialogVisible也就只变化了一次变成了true
费解……
4、那我关了动画吧,注释掉以上,诶,好了。
5、然后我就疯狂找规律啥时候会出现闪屏呢,好像是threejs加载了很多动画以后就会出现,如果仅仅加载场景没有各种特效,弹出框是没有闪屏的。
这好像也说得通,因为threejs在不停渲染页面,而弹出框动画也有执行时间也在渲染界面,所以冲突了?
于是乎我修改弹出框的动画时间:
.el-dialog__wrapper {
transition-duration: 3s;
}
果然出现了奇奇怪怪的现象,虽然也不能证明啥。
思考:
element-ui并未对外提供这个动画控制,所以……我不知道了,反正就是冲突了。
注释掉上述代码就行了,和threejs连用的el-dialog还是用默认的动画吧。
哎,记录一下,求大神解答……