如何解决element-ui中select下拉框popper超出弹框问题

 更新时间:2024年04月27日 11:52:11   作者:j-ymg  
这篇文章主要介绍了如何解决element-ui中select下拉框popper超出弹框问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题场景

如下:

尝试了好几种解决方法,比如从下拉框el-popper使用fixed定位入手,修改popper-append-to-body,或者修改z-index

看了源码后又尝试监听表格滚动使用`this.$refs.table.handleClose()`关闭popper,但都未达到我想要的效果。

尝试了网上一些解决方案,跟我之前的尝试一样,只有拖动滚动条停止的时候popper消失,滑动鼠标滚轮则无效。无奈我只好直接修改源码的visible来关闭popper,

解决方法如下:

解决方法

1、先把element-ui下select.vue的源码单独拎出来

添加自己的代码(另外还需修改导入路径)形成组件Select.vue。

改动如下:

(1) 修改源码import路径

import Emitter from 'element-ui/src/mixins/emitter';
import Focus from 'element-ui/src/mixins/focus';
import Locale from 'element-ui/src/mixins/locale';
import ElInput from 'element-ui/packages/input';
import ElTag from 'element-ui/packages/tag';
import ElScrollbar from 'element-ui/packages/scrollbar';
import debounce from 'element-ui/node_modules/throttle-debounce/debounce';
import Clickoutside from 'element-ui/src/utils/clickoutside';
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event';
import scrollIntoView from 'element-ui/src/utils/scroll-into-view';
import { getValueByPath, valueEquals, isIE, isEdge } from 'element-ui/src/utils/util';
import { isKorean } from 'element-ui/src/utils/shared';
import NavigationMixin from 'element-ui/packages/select/src/navigation-mixin';
import ElOption from 'element-ui/packages/select/src/option';
import ElSelectMenu from 'element-ui/packages/select/src/select-dropdown';

(2) 在select.vue源码的基础上接收父组件传来的scrollTop,监听scrollTop的改变使visible为false。

props: {
    // 源码上新增:父组件表格滚动条
    scrollTop: {
      type: Number,
      default: 0,
    },
  },
  
  watch: {
    //  源码上新增:滚动条滚动就隐藏下拉框
    scrollTop() {
      this.visible = false;
    },
  }

2、把el-select改成Select组件

监听滚动条的滚动,滚动就隐藏下拉框

主要代码如下:

import Select from '@/components/common/select';

components: { Select },
data() {
    return {
      tempTableBody: null,
      // 滚动条位置,用来判断滚动条滚动隐藏下拉框
      scrollTop: 0,
    };
  },
  
  mounted() {
    this.onscroll();
  },
  methods: {
    // 监听table的bodyWrapper的滚动
    onscroll() {
      this.$nextTick(() => {
        this.tempTableBody= this.$refs.editTempTable.bodyWrapper;
        if (this.tempTableBody) {
          this.tempTableBody.addEventListener('scroll', this.handleScroll, false);
        }
      });
    },
    // 滚动条出现滚动就改变scrollTop的值
    handleScroll() {
      this.scrollTop = this.tempTableBody.scrollTop;
      // this.$refs.matchField.handleClose();
    },
  }    

总结

至此,就成功解决这个问题了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue3.0插件执行原理与实战

    Vue3.0插件执行原理与实战

    这篇文章主要介绍了Vue3.0插件执行原理与实战,Vue项目能够使用很多插件来丰富自己的功能Vue-Router、Vuex等,节省了我们大量的人力和物力,下面我们就一起来了解Vue3.0插件的原理吧,需要的小伙伴可以参考一下
    2022-02-02
  • vue/cli3版本打包如何去掉soucemap文件

    vue/cli3版本打包如何去掉soucemap文件

    这篇文章主要介绍了vue/cli3版本打包如何去掉soucemap文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • vue使用leafLet方式(绘图工具)

    vue使用leafLet方式(绘图工具)

    这篇文章主要介绍了vue使用leafLet方式(绘图工具),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • vue3采用xlsx库实现本地上传excel文件功能

    vue3采用xlsx库实现本地上传excel文件功能

    这篇文章主要为大家详细介绍了vue3如何采用xlsx库实现本地上传excel文件功能,并且前端解析为Json数据,感兴趣的小伙伴可以了解一下
    2025-02-02
  • vue 中动态绑定class 和 style的方法代码详解

    vue 中动态绑定class 和 style的方法代码详解

    这篇文章主要介绍了vue 中动态绑定class 和 style的方法,通过实例结合的形式给大家接受的非常详细,需要的朋友参考下吧
    2018-06-06
  • 带你理解vue中的v-bind

    带你理解vue中的v-bind

    如果你写过vue,对v-bind这个指令一定不陌生。 下面小编将从源码层面去带大家剖析一下v-bind背后的原理,需要的小伙伴可以参考下面章的具体内容
    2021-09-09
  • Vue 实现复制功能,不需要任何结构内容直接复制方式

    Vue 实现复制功能,不需要任何结构内容直接复制方式

    今天小编就为大家分享一篇Vue 实现复制功能,不需要任何结构内容直接复制方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Vue 全部生命周期组件梳理整理

    Vue 全部生命周期组件梳理整理

    这篇文章主要介绍了Vue 全部生命周期组件梳理整理,在创建组件之前使用;在实例初始化之后,进行数据侦听和事件,侦听器的配置之前同步调用
    2022-06-06
  • 详解vue中this.$emit()的返回值是什么

    详解vue中this.$emit()的返回值是什么

    这篇文章主要介绍了详解vue中this.$emit()的返回值是什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • vue使用html2canvas和jspdf将html转成pdf

    vue使用html2canvas和jspdf将html转成pdf

    在前端开发中, html转pdf是最常见的需求,下面这篇文章主要给大家介绍了关于vue如何使用html2canvas和jspdf将html转成pdf的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03

最新评论