前端element-ui兩層dialog嵌套遮罩層消失的問題解決辦法
背景
總覺得element-ui dialog的遮罩層邏輯有點晦澀,當一個dialog內(nèi)嵌另一個dialog時,它的遮罩層卻始終只有一個,也就是下方class="v-modal"的div。
可以看到, v-modal的層級總是比dialog低一層。
問題
當兩層dialog為直接父子關(guān)系時, 我們可以簡單的使用其屬性append-to-body, modal-append-to-body來解決問題:
- 如,第二層dialog內(nèi)容被遮罩層覆蓋。
<el-dialog> ... <el-dialog> </el-dialog> </el-dialog>
但是,當兩層dialog不是直接父子關(guān)系, 你可能會碰到關(guān)閉dialog2時,回到dialog1后,遮罩層消失的問題。
推測:
- 關(guān)閉dialog時, 隱藏遮罩層的邏輯是有延遲的,可能(幾十毫秒)。
- 關(guān)閉dialog2時,element會為dialog1動態(tài)添加一個v-modal的遮罩層。
- 在特定情況下,上述 邏輯1 會晚于 邏輯2 ., 導(dǎo)致dialog1的遮罩層消失
<el-dialog ref="dialog1"> ... <el-tab> ... <el-dialog ref="dialog2"> </el-dialog> <el-tab> </el-dialog>
解決思路
回到dialog1時, 手動判斷 v-modal遮罩層是否存在,沒有則添加。
// 解決dialog嵌套,從第二層返回后,遮罩層消失的問題 addModalDivIfNotExists() { // 獲取dialog的父級div const parentDiv = this.$refs.parentDiv; // 獲取dialog const dialog = this.$refs.dialog // 檢查是否已存在class為"v-modal"的div const existingModalDiv = parentDiv.querySelector('.v-modal'); if (!existingModalDiv) { // 如果不存在,則創(chuàng)建一個新的div const newModalDiv = document.createElement('div'); newModalDiv.classList.add('v-modal'); // 設(shè)置z-index const parentZIndex = dialog.$el.style.zIndex newModalDiv.style.zIndex = Number(parentZIndex) - 1 // 將新的div添加到父級div中 parentDiv.appendChild(newModalDiv); } },
題外話
使用ant design vue的modal時, 似乎沒有碰到類似問題
總結(jié)
到此這篇關(guān)于前端element-ui兩層dialog嵌套遮罩層消失的問題解決的文章就介紹到這了,更多相關(guān)element-ui兩層dialog嵌套遮罩層消失內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決element-ui的el-dialog組件中調(diào)用ref無效的問題
這篇文章主要介紹了解決element-ui的el-dialog組件中調(diào)用ref無效的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02Vue實現(xiàn)預(yù)覽docx/xlsx/pdf等類型文件功能
這篇文章主要介紹了如何在Vue中實現(xiàn)docx/xlsx/pdf等類型文件預(yù)覽功能,在實現(xiàn)過程中,需要注意文件的格式和轉(zhuǎn)換方式,以及插件和組件的使用方法和注意事項,需要的朋友可以參考下2023-05-05解決vue3項目打包發(fā)布到服務(wù)器后訪問頁面顯示空白問題
這篇文章主要介紹了解決vue3項目打包發(fā)布到服務(wù)器后訪問頁面顯示空白問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03vue?Proxy數(shù)據(jù)代理進行校驗部分源碼實例解析
Proxy提供了強大的Javascript元編程,有許多功能,包括運算符重載,對象模擬,簡潔而靈活的API創(chuàng)建,對象變化事件,甚至Vue 3背后的內(nèi)部響應(yīng)系統(tǒng)提供動力,這篇文章主要給大家介紹了關(guān)于vue?Proxy數(shù)據(jù)代理進行校驗部分源碼解析的相關(guān)資料,需要的朋友可以參考下2022-01-01Vue.js 實現(xiàn)數(shù)據(jù)展示全部和收起功能
這篇文章主要介紹了Vue.js 實現(xiàn)數(shù)據(jù)展示全部和收起功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09vue+element表格實現(xiàn)多層數(shù)據(jù)的嵌套方式
這篇文章主要介紹了vue+element表格實現(xiàn)多層數(shù)據(jù)的嵌套方式,具有很好的參考價值。希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09