1. 程式人生 > >js 實現遮罩層鎖屏功能

js 實現遮罩層鎖屏功能

我們需要對彈出的視窗進行強調突出表現,那麼需要對周圍的元素進行遮罩。並且周圍的元素還不可以進行操作,又需要進行鎖屏。最後我們需要對重複的程式碼進行封裝。

一 介面設計

效果圖一

效果圖2


二 設定效果

1.做一個遮罩層

       建立一個可以佈滿整個瀏覽器的div,將它z-index層結構設定為9998,而login彈窗的div設定為9999,高一層。這樣可以鎖屏+遮罩。

       畫布的css為:

filter:alpha(Opacity=30);//IE透明度

opacity:0.30;//非IE透明度

z-index:9998;//層高度。

2.鎖屏功能

Base.prototype.lock

=function(){

       for(var i=0; i<this.elements.length;i++){//遍歷

              this.elements[i].style.height=getInner().height+'px';

        //得到遮罩層的(整個瀏覽器)高

              this.elements[i].style.width=getInner().width+'px';

        //得到瀏覽器遮罩層的(整個瀏覽器)寬

              this.elements[i].style.display='block';//顯示遮罩層

       }

       return this;//返回再次呼叫 否則只能呼叫一次

};

2.1.跨瀏覽器獲取視窗大小

//跨瀏覽器獲取視窗大小相容

function getInner(){

       if(typeof innerWidth){//低版本的火狐瀏覽器

              return {

                     width:window.innerWidth,

                     height:window.innerHeight

              }

       }else{//其他瀏覽器

              return{

                     width:document.documentElement.clientWidth,

                     height:document.documentElement.clientHeight

              }

       }

}

3.關閉鎖屏功能

//關閉鎖屏

Base.prototype.unlock=function(){

       for(var i=0; i<this.elements.length;i++){//遍歷

              this.elements[i].style.display='none';//隱藏遮罩層

       }

       return this;//返回再次呼叫 否則只能呼叫一次

};

4.呼叫

//登入

       //設定物體居中、觸發瀏覽器事件

       var login=$().getId('login');

       var screen=$().getId('screen');

       login.center(350,250);

       //改變瀏覽器視窗大小

       $().resize(function(){

              login.center(350,250);

              if(login.css('display')==='block'){//登入彈框開啟時才執行鎖屏

                     screen.lock();

              }

       });

       //點選事件 開啟關閉

       $().getClass('logBtn').click(function(){

              login.css('display','block');

              screen.lock();

       });

       $().getClass('close').click(function(){

              login.css('display','none');

              screen.unlock();

       });