彈窗層效果的實現(非jQuery實現)

2022-02-11 10:42:57 字數 4218 閱讀 4407

要想實現彈窗的效果,首先應該建立乙個覆蓋層masklayer,以及乙個顯示層presentlayer。

其次,每次彈窗時(除首次彈窗外),masklayer的顯示以及隱藏不應該導致文件流的reflow,但是repaint不可避免。所以對於masklayer,用以display:absolute;

最為關鍵的就是顯示層的定位居中顯示,根據masklayer的高度和寬度計算出顯示層的位置。

另外,為了多樣性的支援彈窗的內容,該實現也提供了ajax抓取的相應功能,但具體並未測試,倉促做出的簡單測試也並不完美。

為了節約空間大小,直接將該頁面呈現。

doctype html

>

<

html

>

<

head

lang

="en"

>

<

meta

charset

="utf-8"

>

<

title

>

title

>

<

style

>

html,body

#masklayer

#presentlayer

style

>

head

>

<

body

>

<

img

id="test"

src=""

width

="200"

height

="200"

>

<

script

>

document.queryselector(

'#test

').addeventlistener(

'click',

function

(),false

)

script

>

<

script

>

(function

(window)

if(!window.popup)

varpopup

={};

window.popup

=popup;

popup.u

=function

() scontent

=content;

sisajax

=isajax;

swidth

=width;

sheight

=height;

sauto

=auto;

this

.spread();

this

.preshow();

this

.filter(masklayer,80,

3,1);

if(timeout)

settimeout(that.hide,timeout

*1000

); },

load:

function

(content,isajax,width,height,auto)}};

xhr.open(

'get

',content,

true

); xhr.send(

null

); }

else

},hide:

function

(), process:

function

(content,width,height,auto)

else

this

.layout(prew,preh,width,height);}},

ajax:

function

(),function

(),

function

()];

for(

vari,len

=fns.length;i

<

len;i++)

catch

(e){}

}return

ajax();

},resize:

function

(),

//presentlayer 初始顯示

preshow:

function

(bgimg),

/*** @param bgimg

* 遮蓋層展開,設定height width

**/spread:

function

(bgimg),

//定位 presentlayer

position:

function

(), layout:

function

(prew,preh,width,height)

else

factorw

=finw

>

prew ?1

: -1;

factorh

=finh

>

preh ?1

: -1;

presentlayer.style.paddingbottom ='

10px';

presentlayer.style.paddingtop ='

10px';

presentlayer.style.paddingleft ='

10px';

presentlayer.style.paddingright ='

10px';

contentlayer.style.display =''

;

function

recurse()

}else

if(curh

==finh)

}else

that.position();

}timeid

=setinterval(recurse,

20);

},/**

* @param el

* @param opacity

* @param factor 每次迭代所增減的因子

* @param iod 增減性,取值為正負1. -1 則意味著透明度逐漸為零

*/filter:

function

(el,opacity,factor,iod)

varcurval =0

,that

=this

;

if(iod ==-

1)else

function

recurse()

else

el ===presentlayer

?that.filter(masklayer,0,

3,-1

):contentlayer.innerhtml =''

; }

}else

}el.uuid

=setinterval(recurse,

20);}};

}();

popup.p

=function

(), pageheight:

function

(), clientwidth:

function

(), clientheight:

function

() }

}();

})(window);

script

>

body

>

html

>

Jquery實現彈窗

window.html csdn歡迎您 哈哈哈哈哈哈哈 csdn歡迎您 哈哈哈哈哈哈哈 csdn歡迎您 哈哈哈哈哈哈哈 window.js 視窗的高度 var windowheight 視窗的寬度 var windowwidth 彈窗的高度 var popheight 彈窗的寬度 var popwi...

python實現祝福彈窗效果

中秋節,是中國傳統節日之一,為每年的農曆八月十五,也是我國僅次於春節的第二大傳統節日。傳說是為了紀念嫦娥。祝大家中秋快樂 中秋節,怎麼用python祝福大家節日快樂是乙個很頭疼的事,但是只要有它什麼都不是問題。接下來教大家怎麼用python獻上滿滿的祝福。首先給大家看一下最終模樣。注 密集恐懼症患者...

jbox彈窗 強大的jquery彈出層外掛程式jBox

jbox是一款功能強大的jquery彈出層外掛程式。jbox外掛程式可以用來建立tooltips提示框 模態視窗 畫廊等多種效果。使用方法 在頁面中引入jbox.all.min.css jquery和jbox.all.min.js檔案。建立tooltips html結構如下。hover me hov...