JavaScript練手小技巧:頁面遮罩層

有時候,我們需要在頁面上創建一個遮罩層,以突出某個對話框。比如,某度的登錄框:

這個遮罩層,蓋住了整個頁面,並且隨着頁面的滾動,也一直穩如老狗,貼在頁面上,紋絲不動。

看上去很複雜,其實很簡單~!

1. 就是一個固定定位的標籤,貼在整個窗口上,背景色爲半透明的黑色~!

2. 還可以藉機去掉窗口的滾動條,這樣就連窗口滾動都不可以。

3. 有的遮罩層點擊後,還可以去掉它。

這裏利用一個按鈕來動態生成遮罩層:

<button id="btn" type="button">點擊彈出遮罩層</button>

CSS

.mask{
    left: 0;
    top: 0;
    bottom:0;
    right:0;
    position: fixed;
    z-index: 99999;
    background: rgba(0,0,0,0.6);
}
/* <html>標籤要用的樣式 ,跟窗口一樣大,內容超出隱藏,避免出現滾動條 */
.htmlMask{
    height: 100%;
    width: 100%;
    overflow: hidden;
}

JS部分

let btn = document.getElementById("btn");
/*
*  生成 mask
*  */
let createMask = ()=>{
    // 如果 mask 已經存在了,就不用再創建mask了
    if( document.getElementById("mask")){
        return true;
    }
    let  mask = document.createElement("div");
        mask.id = "mask";
        mask.className = "mask";
    // 把 mask 添加到body 裏。
    document.body.appendChild( mask );
    // 控制 <html> 標籤的樣式
    document.documentElement.classList.add("htmlMask");
    // 點擊mask,就去掉mask
    mask.addEventListener("click", deleteMask );
};
/*
* 刪除 mask
* */
let  deleteMask = ()=>{
    let  mask ;
    // 如果 mask 存在,就刪除
    if( mask = document.getElementById("mask")){
        // 移除 mask 上的點擊事件
        mask.removeEventListener("click", deleteMask );
        // 刪除 mask 標籤
        mask.parentNode.removeChild( mask );
        // 去掉 <html> 標籤的特定樣式
        document.documentElement.classList.remove("htmlMask");
    }
};

btn.addEventListener("click",function(){
    createMask();
});

具體看註釋。

這裏要說明下,DOM 中:

document.body  表示body 標籤

document.documentElement  表示 <html>標籤。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章