【踩坑记】elementUI部分组件操作时出现抖动的坑,终于解决了!

1,395 阅读2分钟

最近在项目版本迭代中,接手了一个在已有表单中增加三个字段的任务。

一顿代码猛敲过后,很快,这三个字段相关的组件、逻辑都搞好了。搞完之后,准备简单自测一下。

倒是没发现什么功能问题,但是,

有两个模块(表单分为3个模块),只要我一进行点击选中操作,该模块下的表单就会出现抖动。

一开始,以为是自己添加的代码影响的。但是跑到以前版本去看,也存在上述问题。说明是历史遗留问题,非新加的代码问题。

然后就开始排查问题了。

1.高度没有统一?

统一设置el-input_inner高度后,抖动问题依然存在。

2.布局影响?

这边直接用的是ElementUI的el-row和el-col的布局,一番检查之后,还是没发现有啥不对。然后干脆把某两行换成flex布局,然后看到flex布局区域的表单抖动问题并没有解除。

到底是哪里出问题了?自己找不到原因,干脆到网上搜搜把。

一搜,还真有各种类似情况,并提出了解决办法。参照网上给的办法,到自己的项目中试了试果然好了。

我项目中的表单存在以下三种场景的抖动,我分别针对该场景加上了相应的代码,逐一验证,确实可行。

1.el-input框校验信息出现时模块内表单组件抖动,用以下代码修复

.el-form-item__error {
   transition: none!important;
 }

2.el-radio组件选中时模块内表单组件抖动,用以下代码修复

.el-radio ::after {
   transition: none!important;
 }

3.el-select组件操作时模块内表单组件抖动,用以下代码修复

.el-input__icon {
   transition: none!important;
 }

看网上还有其他场景下抖动的解决方法,我一并写出来,等以后如果再遇到,就可以直接验证解决了。

1.el-checkbox组件选中时抖动

.el-checkbox ::after {
  transition: none!important;
}

2.el-tree组件选中时抖动

.el-icon-caret-right {
  transition: none!important;
}

3.el-tab组件切换时抖动

.el-tabs__active-bar {
  transition: none!important;
}

从上述代码可以看出,本次抖动的罪归祸首,是transition属性。去掉transition效果,除了el-select组件的下拉箭头切换时略显生硬,其他的感觉没啥影响。所以综合考虑后,还是选择去掉transition效果,因为抖动感知太明显了。