贴一段代码
函数中程序同步执行,先后触发两个message的弹窗重叠
预期的情况是下图这样一上一下出现
这因为vue的异步更新队列有缓冲机制,第一次message取item.message只是下移了默认的offset(即16px),并没有加上第一个$message的offsetHeight。
解决这个问题的办法
1、如果是单一场景,用$nextTick处理
在this.$nextTick(() => {
this.$message(...);
});
可以保证dom更新之后再触发el.offsetHeight
2、将第二个nextTick同理)
3、async + await
注:
如果有多个(>=3个)nextTick以及await只能解决第1个与第2个重叠的情况,第2个、第3个还会重叠,这种情况改用setTimeout。
完结。