您好,欢迎访问一九零五行业门户网

纯JavaScript实现的完美渐变弹出层效果代码_javascript技巧

如题,本文将使用纯粹的脚本javascript实现渐变的弹出层,其想法也非常简单:利用iframe实现遮盖,再借助一个div用于展现弹出层的内容,最后再使用其内置函数setinterval()和clearinterval()实现渐变,原理非常简单,只不过要注意对dom对象/元素的精确控制。由于代码比较简单,在此就不再赘述。以下代码在ie6+,ff3.5+测试通过。
脚本flyout.js:
复制代码 代码如下:
// jscript file
if (navigator.useragent.tolowercase().indexof('msie') > -1) {
window.isie = true;
window.isie6 = navigator.appversion.indexof(msie 6.0;) > -1;
window.isie7 = navigator.appversion.indexof(msie 7.0;) > -1;
window.isie8 = navigator.appversion.indexof(msie 8.0;) > -1;
}
var $ = function(objid) { return document.getelementbyid(objid) };
var _flyout;
var _fadetimer;
function showflyout(divwidth, divheight, paddingwidth) {
var flyout = function() {
}
flyout.prototype = {
clientwidth: document.documentelement.clientwidth,
clientheight: document.documentelement.clientheight,
scrollwidth: document.documentelement.scrollwidth,
scrollheight: document.documentelement.scrollheight,
iframeid: envelopiframe,
divid: popupcontent,
iframebgcolor: #888888,
show: function(divcontent) {
//create envelop iframe
csstext = position:absolute; z-index:100; background-color:#888888; border-width:0px; filter:alpha(opacity=0); opacity:0.0;;
csstext += left:0px;;
csstext += top:0px;;
csstext += width: + this.scrollwidth + px;;
csstext += height: + this.scrollheight + px;;
this.create(iframe, this.iframeid, csstext, cppl_iframesrc.htm, );
_fadetimer = setinterval(function() { fadeiframe(envelopiframe, 0.05, 0, 0.5, true) }, 5);
//create flyout
var csstext = ;
csstext += display:block; _position:absolute; position:fixed; z-index:101; border:solid 1px gray; background-color:white;;
csstext += left: + (this.clientwidth - divwidth - paddingwidth) / 2 + px;;
csstext += top: + (this.clientheight - divheight - paddingwidth) / 2 + px;;
csstext += width: + (divwidth + paddingwidth) + px;;
csstext += height: + (divheight + paddingwidth) + px;;
this.create(div, this.divid, csstext, , divcontent);
},
create: function(type, id, csstext, iframesrc, innerhtml) {
var obj = document.createelement(type);
if (iframesrc.length > 0) {
obj.src = iframesrc;
}
obj.setattribute(id, id);
obj.style.csstext = csstext;
if (innerhtml.length > 0) {
obj.innerhtml = innerhtml;
}
document.body.appendchild(obj);
if (iframesrc.length > 0) {
if (window.isie) {
window.envelopiframe.document.bgcolor = this.iframebgcolor;
}
}
},
close: function() {
var objiframe = document.getelementbyid(this.iframeid);
var objdiv = document.getelementbyid(this.divid);
if (objiframe && objdiv) {
document.body.removechild(objiframe);
document.body.removechild(objdiv);
}
},
onresize: function() {
var objiframe = document.getelementbyid(this.iframeid);
var objdiv = document.getelementbyid(this.divid);
if (objiframe && objdiv) {
objiframe.style.width = document.documentelement.scrollwidth + px;
objiframe.style.height = document.documentelement.scrollheight + px;
objdiv.style.left = (document.documentelement.clientwidth - divwidth) / 2 + px;
objdiv.style.top = (document.documentelement.clientheight - divheight) / 2 + px;
}
},
onscroll: function() {
var objdiv = document.getelementbyid(this.divid);
if (objdiv) {
objdiv.style.left = (document.documentelement.clientwidth - divwidth) / 2 + document.documentelement.scrollleft + px;
objdiv.style.top = (document.documentelement.clientheight - divheight) / 2 + document.documentelement.scrolltop + px;
}
}
};
_flyout = new flyout();
_flyout.show(this is a flyout.close flyout
);
}
function closeflyout() {
clearinterval(_fadetimer);
_fadetimer = setinterval(function() { fadeiframe(envelopiframe, 0.05, 0, 0.5, false) }, 5);
}
window.onresize = function() {
if (_flyout) {
_flyout.onresize();
}
};
window.onscroll = function() {
if (_flyout && isie6) {
_flyout.onscroll();
}
};
function fadeiframe(objid, speed, minopacity, maxopacity, flag) {
var dialog = $(objid);
if (dialog) {
var value;
if (flag) {
if (parsefloat(dialog.style.opacity) value = parsefloat(dialog.style.opacity) + speed;
dialog.style.filter = 'alpha(opacity=' + value * 100 + ')';
dialog.style.opacity = '' + value + '';
}
else {
clearinterval(_fadetimer);
}
}
else {
if (parsefloat(dialog.style.opacity) >= minopacity) {
value = parsefloat(dialog.style.opacity) - speed;
dialog.style.filter = 'alpha(opacity=' + value * 100 + ')';
dialog.style.opacity = '' + value + '';
}
else {
clearinterval(_fadetimer);
if (_flyout) {
_flyout.close();
}
}
}
}
}
调用aspx代码:
复制代码 代码如下:
flyout sample
click me to test
最终效果图:
其它类似信息

推荐信息