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