解決瀏覽器在局部區(qū)域全屏下,UI庫部分彈窗組件無法正常顯示的問題

場景

使用 screenfull.js 將特定區(qū)域局部全屏,全屏狀態(tài)下,部分操作的彈框不見了。關(guān)閉全屏才能顯示出來。

原因分析

UI庫的組件是插入了body中,局部全屏狀態(tài)下,把body界面覆蓋,故無法正常顯示。經(jīng)測試,即使將其組件的層級改變?yōu)閦-index:9999, 亦無法顯示。

解決方案

我們不妨換個(gè)思路,既然直接將需要全屏的div節(jié)點(diǎn)傳入screenfull中會(huì)導(dǎo)致彈框無法顯示,不如就將body直接全屏,再通過改變CSS使這個(gè)div全屏顯示,當(dāng)取消全屏?xí)r,再將這個(gè)div恢復(fù)到原位置。

<!--isFull`為當(dāng)前全屏狀態(tài),為布爾值-->
<div :class="{'full':isFull}" id="test">
 <!--內(nèi)容-->
</div>                  

CSS
注意:full中z-index關(guān)鍵,必須小于彈框組件的默認(rèn)z-index??淳唧w為多少。有些為2000

.full{
    position:fixed !important;
    z-index:200;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    height: 100% !important;
}

進(jìn)頁面初始化,監(jiān)聽全屏狀態(tài)并賦值給isFull,isFull為true時(shí),動(dòng)態(tài)給div添加樣式full

data(){
    return{
        isFull:false
    }
},
created(){
    this.init()
},
init(){
    if (screenfull.isEnabled) {
        screenfull.on('change',this.change)
    }
},
change(){
    this.isFull = screenfull.isFullscreen
    // console.log(this.isFull)
}, 

將body全屏,傳入body節(jié)點(diǎn)

// 全屏
handleScreen() {
    //screenfull.isEnabled  此方法返回布爾值,判斷當(dāng)前能不能進(jìn)入全屏
    if (!screenfull.isEnabled) {
        return false
    }
    const bodyNode = document.querySelector('body')
    //screenfull.toggle 此方法是執(zhí)行全屏化操作。如果已是全屏狀態(tài),則退出全屏
    screenfull.toggle(bodyNode)
}, 

參考鏈接

https://blog.csdn.net/juhuagg/article/details/134930203

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容