如何解決element-ui中select下拉框popper超出彈框問題
問題場(chǎng)景
如下:
嘗試了好幾種解決方法,比如從下拉框el-popper使用fixed定位入手,修改popper-append-to-body,或者修改z-index
看了源碼后又嘗試監(jiān)聽表格滾動(dòng)使用`this.$refs.table.handleClose()`關(guān)閉popper,但都未達(dá)到我想要的效果。
嘗試了網(wǎng)上一些解決方案,跟我之前的嘗試一樣,只有拖動(dòng)滾動(dòng)條停止的時(shí)候popper消失,滑動(dòng)鼠標(biāo)滾輪則無效。無奈我只好直接修改源碼的visible來關(guān)閉popper,
解決方法如下:
解決方法
1、先把element-ui下select.vue的源碼單獨(dú)拎出來
添加自己的代碼(另外還需修改導(dǎo)入路徑)形成組件Select.vue。
改動(dòng)如下:
(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源碼的基礎(chǔ)上接收父組件傳來的scrollTop,監(jiān)聽scrollTop的改變使visible為false。
props: { // 源碼上新增:父組件表格滾動(dòng)條 scrollTop: { type: Number, default: 0, }, }, watch: { // 源碼上新增:滾動(dòng)條滾動(dòng)就隱藏下拉框 scrollTop() { this.visible = false; }, }
2、把el-select改成Select組件
監(jiān)聽滾動(dòng)條的滾動(dòng),滾動(dòng)就隱藏下拉框
主要代碼如下:
import Select from '@/components/common/select'; components: { Select }, data() { return { tempTableBody: null, // 滾動(dòng)條位置,用來判斷滾動(dòng)條滾動(dòng)隱藏下拉框 scrollTop: 0, }; }, mounted() { this.onscroll(); }, methods: { // 監(jiān)聽table的bodyWrapper的滾動(dòng) onscroll() { this.$nextTick(() => { this.tempTableBody= this.$refs.editTempTable.bodyWrapper; if (this.tempTableBody) { this.tempTableBody.addEventListener('scroll', this.handleScroll, false); } }); }, // 滾動(dòng)條出現(xiàn)滾動(dòng)就改變scrollTop的值 handleScroll() { this.scrollTop = this.tempTableBody.scrollTop; // this.$refs.matchField.handleClose(); }, }
總結(jié)
至此,就成功解決這個(gè)問題了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- element-ui中select下拉框加載大數(shù)據(jù)渲染優(yōu)化方式
- 去除element-ui下拉框的下拉箭頭的實(shí)現(xiàn)
- 基于element-ui中el-select下拉框選項(xiàng)過多的優(yōu)化方案
- 關(guān)于element-ui?select?下拉框位置錯(cuò)亂問題解決
- element-ui+vue-treeselect下拉框的校驗(yàn)過程
- 解決element-ui的下拉框有值卻無法選中的情況
- Vue + Element-ui的下拉框el-select獲取額外參數(shù)詳解
- 在element-ui的select下拉框加上滾動(dòng)加載
- 使用Vant完成DatetimePicker 日期的選擇器操作
- 如何修改element-ui日期下拉框datetimePicker的背景色樣式
相關(guān)文章
Vue3.0插件執(zhí)行原理與實(shí)戰(zhàn)
這篇文章主要介紹了Vue3.0插件執(zhí)行原理與實(shí)戰(zhàn),Vue項(xiàng)目能夠使用很多插件來豐富自己的功能Vue-Router、Vuex等,節(jié)省了我們大量的人力和物力,下面我們就一起來了解Vue3.0插件的原理吧,需要的小伙伴可以參考一下2022-02-02vue3采用xlsx庫實(shí)現(xiàn)本地上傳excel文件功能
這篇文章主要為大家詳細(xì)介紹了vue3如何采用xlsx庫實(shí)現(xiàn)本地上傳excel文件功能,并且前端解析為Json數(shù)據(jù),感興趣的小伙伴可以了解一下2025-02-02vue 中動(dòng)態(tài)綁定class 和 style的方法代碼詳解
這篇文章主要介紹了vue 中動(dòng)態(tài)綁定class 和 style的方法,通過實(shí)例結(jié)合的形式給大家接受的非常詳細(xì),需要的朋友參考下吧2018-06-06Vue 實(shí)現(xiàn)復(fù)制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復(fù)制方式
今天小編就為大家分享一篇Vue 實(shí)現(xiàn)復(fù)制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復(fù)制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11vue使用html2canvas和jspdf將html轉(zhuǎn)成pdf
在前端開發(fā)中, html轉(zhuǎn)pdf是最常見的需求,下面這篇文章主要給大家介紹了關(guān)于vue如何使用html2canvas和jspdf將html轉(zhuǎn)成pdf的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03