首頁 > web前端 > js教程 > javascript如何實現彈出層效果? (程式碼分析)

javascript如何實現彈出層效果? (程式碼分析)

青灯夜游
發布: 2020-06-30 10:18:48
轉載
2615 人瀏覽過

javascript如何實現彈出層效果? (程式碼分析)

很多時候我們想去某某網站做點什麼的時候,就會讓我們先註冊登入後才可以存取內容,而現在很多網站註冊登入的時候都會有一種遮罩層的效果,就是背景是帶有透明度的黑色遮罩,蓋滿整個網站,然後登入框彈出固定在螢幕的居中位置。那麼,今天就練練這個實用又簡單的效果吧。 PS:這是我學習後練習的demo!

首先,需要有一個按鈕來模擬登入:

<button>登录</button>
登入後複製

javascript如何實現彈出層效果? (程式碼分析)

然後呢,我們想透過點擊這個按鈕來實現這樣一個效果:

javascript如何實現彈出層效果? (程式碼分析)

從上面這張圖片,我們可以看到,灰色背景就是遮罩層,而淺藍色的區域就是登陸框位置所在了。 OK,下面先看一下HTML結構和css樣式:

<div></div>  //遮罩层
<div>       //登陆框包裹层
      <div>  //表单内容
          <div>点击关闭</div>  //关闭按钮
          我是登录框哟!
      </div>
 </div>
登入後複製

這裡只是將HTML結構拿出來講一下,但是下面我們是透過JS來創建它們的,所以這裡只是為了方便我們理解,並不需要放在html檔案裡。

CSS樣式:

#close{ 
    background:url(img/close.png) no-repeat; 
    width:30px; 
    height:30px; 
    cursor:pointer; 
    position:absolute; 
    right:5px; 
    top:5px; 
    text-indent:-999em;
    }
#mask{ 
    background-color:#ccc;
    opacity:0.7;
    filter: alpha(opacity=70); 
    position:absolute; 
    left:0;
    top:0;
    z-index:1000;
    }
#login{ 
    position:fixed;
    z-index:1001;
    }
.loginCon{ 
    position:relative; 
    width:670px;
    height:380px;
    background:lightblue;
    border:3px solid #333;
    text-align: center;
    }
登入後複製

css樣式中需要注意一下z-index屬性,因為我們需要讓遮罩層蓋住除了登入框之外所有的頁面內容,所以,要確保登入框的層次最高,遮罩層次之,所以一般將這兩個的z-index屬性值設為比較高的數值,但遮罩層要比登陸框少一層。然後還有一點就是遮罩層必須設定透明度,不然就太難看了,使用者體驗極度不好!

JS實作程式碼:

function dialog(){
    //获取页面的高度和宽度
    var sWidth=document.body.scrollWidth || document.documentElement.scrollWidth;
    var sHeight=document.body.scrollHeight || document.documentElement.scrollHeight;
    
    //获取页面的可视区域高度和宽度
    var wHeight=document.documentElement.clientHeight || document.body.clientHeight;
    
                //创建遮罩层
    var oMask=document.createElement("div");
    oMask.id="mask";
    oMask.style.height=sHeight+"px";
    oMask.style.width=sWidth+"px";
    document.body.appendChild(oMask);            //添加到body末尾
      
               //创建登录框
    var oLogin=document.createElement("div");
    oLogin.id="login";
    oLogin.innerHTML="<div>
<div>点击关闭</div>我是登录框哟!</div>";
    document.body.appendChild(oLogin);
    
    //获取登陆框的宽和高
    var dHeight=oLogin.offsetHeight;
    var dWidth=oLogin.offsetWidth;

    //设置登陆框的left和top
    oLogin.style.left=sWidth/2-dWidth/2+"px";
    oLogin.style.top=wHeight/2-dHeight/2+"px";

    //获取关闭按钮
    var oClose=document.getElementById("close");
    
    //点击关闭按钮和点击登陆框以外的区域都可以关闭登陆框
    oClose.onclick=oMask.onclick=function(){
        document.body.removeChild(oLogin);
        document.body.removeChild(oMask);
    };
}
                    
window.onload=function(){
    var oBtn=document.getElementById("btnLogin");
    //点击登录按钮
    oBtn.onclick=function(){
        dialog();
    }
                
}
登入後複製

這個方法是透過JS在事件綁定裡動態建立和移除這些標籤,然後設定他們的 id 和 style 屬性。當然,我們也可以將HTML結構先放在html檔案裡,預設隱藏它們,然後在事件綁定裡控制它們的顯示與隱藏即可!

更多彈出層特效程式碼,請造訪:js程式碼特效 欄位

以上是javascript如何實現彈出層效果? (程式碼分析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板