//类:广告 advert = function(advertputid, putmode, loadmode, hidemode, displayseconds, html, minimizehtml, x, y, speed, width, height, minimizewidth, minimizeheight, href) { this.advertputid = advertputid; //广告投放id this.putmode = putmode; //投放方式,飘动|fly\0窗口左上角|windowlefttop\0窗口右上角|windowrighttop\0窗口右下角|windowrightbottom\0窗口左下角|windowleftbottom\0页面左上角|pagelefttop\0页面右上角|pagerighttop\0页面右下角|pagerightbottom\0页面左下角|pageleftbottom\0页面顶部(居中)|pagetop\0页面底部(居中)|pagebottom\0窗口中部|windowcenter\0窗口上方(左右对称)|windowtopbalance\0窗口下方(左右对称)|windowbottombalance\0页面上方(左右对称)|pagetopbalance\0页面下方(左右对称)|pagebottombalance\0绝对位置|static this.loadmode = loadmode; //加载方式,0/直接显示,1/从下至上移动,2/从上至下移动,3/从左至右移动,4/从右至左移动 this.hidemode = hidemode; //隐藏方式,0/直接关闭,1/从下至上收缩,2/从上至下收缩,3/从左至右收缩,4/从右至左收缩 this.displayseconds = displayseconds; //显示时长 this.html = html; //html this.minimizehtml = minimizehtml; //最小化时html this.x = x; //水平边距 this.y = y; //垂直边距 if(speed==0) { speed = 1; } if(speed>=1) { this.amout = math.round(speed); //移动距离(像素) this.speed = 1; //速度(ms) } else { this.amout = 1; //移动距离(像素) this.speed = math.round(1/speed); //速度(ms) } this.width = width==number(width) ? width + "px" : width; //宽度 this.height = height==number(height) ? height + "px" : height; //高度 this.minimizewidth = minimizewidth==number(minimizewidth) ? minimizewidth + "px" : minimizewidth; //最小化时宽度 this.minimizeheight = minimizeheight==number(minimizeheight) ? minimizeheight + "px" : minimizeheight; //最小化时高度 this.href = href; //链接 this.fixedpositionsupport = true; //是否支持固定位置 this.isminimize = false; //是否最小化 this.flying = "fly"==this.putmode; //是否在漂移,漂移模式时有效 }; advert.prototype.create = function(hostelement) { //显示广告,hostelement:宿主对象,固定位置广告时有效 var advert = this; this.advertbody = document.createelement("div"); this.advertbody.id = 'advert_' + this.advertputid; this.advertbody.style.zindex = 10000; this.advertbody.style.overflow = "hidden"; this.advertbody.style.fontsize = "0px"; this.advertbody.style.textalign = "center"; this.advertbody.style.width = "0px"; this.advertbody.style.height = "0px"; this.advertbody.style.borderstyle = "none"; this.advertbody.style.visibility = 'hidden'; this.advertbody.style.backgroundcolor = "transparent"; if("pagetop"==this.putmode) { this.advertbody.style.zindex = -1; } if(hostelement) { this.advertbody.style.position = 'static'; hostelement.parentnode.replacechild(this.advertbody, hostelement); } else { this.advertbody.style.position = 'fixed'; this.advertbody.style.left = "100px"; if(document.body.childnodes.length==0 || "pagebottom"==this.putmode) { document.body.appendchild(this.advertbody); } else { document.body.insertbefore(this.advertbody, document.body.childnodes[0]); } } //创建div用来显示广告 var divcontent = document.createelement("div"); divcontent.style.width = (",pagetop,pagebottom,".indexof("," + this.putmode + ",")!=-1 ? this.width : "100%"); divcontent.style.height = "100%"; divcontent.style.backgroundcolor = "transparent"; divcontent.style.overflow = "hidden"; divcontent.style.margin = "auto"; this.advertbody.appendchild(divcontent); //pagetop模式时,创建div,高度y if("pagetop"==this.putmode) { this.divpadding = document.createelement("div"); this.divpadding.id = 'advert_' + this.advertputid; this.divpadding.style.position = 'static'; this.divpadding.backgroundcolor = "transparent"; this.divpadding.style.height = this.y==0 ? this.height : this.y + "px"; this.divpadding.style.overflow = "hidden"; document.body.appendchild(this.divpadding); } //判断是否支持fixed样式 this.fixedpositionsupport = this.advertbody.offsetleft==100; if(!hostelement && (!this.fixedpositionsupport || this.putmode.indexof("page")==0)) { this.advertbody.style.position = "absolute"; } this.advertbody.style.fontsize = "12px"; this.advertbody.style.left = "0px"; this.restore(); //输出广告 //有设置显示时间,定时关闭广告 if(this.displayseconds>0) { var advert = this; window.settimeout(function() { advert.display(true); //关闭 }, this.displayseconds * 1000); }; if("fly"==this.putmode) { //漂移 this.fly(); } //绑定事件 var adjustposition = function() { if(!advert.flying) { advert.adjustposition(); } }; if(document.all) { window.attachevent('onload', adjustposition); window.attachevent('onresize', adjustposition); if(this.putmode.indexof("page")!=0) { window.attachevent('onscroll', adjustposition); } } else { window.addeventlistener("load", adjustposition, false); window.addeventlistener("resize", adjustposition, false); if(this.putmode.indexof("page")!=0) { window.addeventlistener("scroll", adjustposition, false); } } }; advert.prototype.destory = function() { //销毁广告 for(var element = document.getelementbyid('advert_' + this.advertputid); element; element = document.getelementbyid('advert_' + this.advertputid)) { element.parentnode.removechild(element); } }; advert.prototype.display = function(hide) { //显示或关闭广告 var displaymode = hide ? this.hidemode : this.loadmode; if(displaymode==0 || this.isminimize) { this.advertbody.style.visibility = 'visible'; if(hide) { this.destory(); } return; } var advert = this; var size = (displaymode<3 ? ("pagetop"==this.putmode ? this.y : this.advertbody.offsetheight) : this.advertbody.offsetwidth); var padding = hide ? 0 : size; var amout = this.amout; var timer = window.setinterval(function() { if(displaymode>2) { //从左至右移动,从右至左移动 advert.advertbody.childnodes[0].style.marginleft = (displaymode==3 ? "-" : "") + padding + "px"; } else if(hide && "pagetop"==advert.putmode) { advert.divpadding.style.height = (size - padding) + "px"; } else if(hide && "static"==advert.putmode) { advert.advertbody.style.height = (size - padding) + "px"; } else { advert.advertbody.childnodes[0].style.margintop = (displaymode==2 ? "-" : "") + padding + "px"; } advert.advertbody.style.visibility = 'visible'; var stop = (hide && padding>=size) || (!hide && padding==0); if(!hide) { padding = math.max(0, padding - amout); } else { padding = math.min(size, padding + amout); } if(stop) { window.clearinterval(timer); if(hide) { advert.destory(); //销毁广告 } } }, this.speed); }; advert.prototype.fly = function() { //漂移 var advert = this; if(this.speed==1) { this.speed *= 2; this.amout *= 2; } this.advertbody.onmouseover = function() { advert.flying = false; }; this.advertbody.onmouseout = function() { advert.flying = true; }; var direction = "right_bottom"; //方向 window.setinterval(function() { if(!advert.flying) { return; } if(direction.indexof("right")!=-1) { //右移 var width = advert.advertbody.offsetwidth; var clientwidth = domutils.getclientwidth(document); advert.x = math.min(advert.x + advert.amout, clientwidth - width); if(advert.x + width >= clientwidth) { direction = direction.replace("right", "left"); } } if(direction.indexof("left")!=-1) { //左移 advert.x = math.max(advert.x - advert.amout, 0); if(advert.x==0) { direction = direction.replace("left", "right"); } } if(direction.indexof("bottom")!=-1) { //下移 var height = advert.advertbody.offsetheight; var clientheight = domutils.getclientheight(document); advert.y = math.min(advert.y + advert.amout, clientheight - height); if(advert.y + height >= clientheight) { direction = direction.replace("bottom", "top"); } } if(direction.indexof("top")!=-1) { //上移 advert.y = math.max(advert.y - advert.amout, 0); if(advert.y==0) { direction = direction.replace("top", "bottom"); } } advert.adjustposition(); }, this.speed); }; advert.prototype.adjustposition = function() { //调整坐标 if(this.advertbody.style.position=="static") { return; } if(",pagetop,pagebottom,".indexof("," + this.putmode + ",")!=-1) { //页面顶部或者底部 var advert = this; advert.advertbody.style.left = "0px"; advert.advertbody.style.width = "100%"; window.settimeout(function() { advert.advertbody.style.width = document.body.scrollwidth + "px"; }, 1); return; } var absolute = this.putmode.indexof("page")==0; var left = (this.fixedpositionsupport || absolute ? 0 : domutils.getscrollleft(document)); var top = (this.fixedpositionsupport || absolute ? 0 : domutils.getscrolltop(document)); var clientwidth = absolute ? document.body.scrollwidth : domutils.getclientwidth(document); var clientheight = absolute ? document.body.scrollheight : domutils.getclientheight(document); //设置左边距 if(",fly,windowlefttop,windowleftbottom,pagelefttop,pageleftbottom,".indexof("," + this.putmode + ",")!=-1) { left += this.x; } else if(",windowrighttop,windowrightbottom,pagerighttop,pagerightbottom,".indexof("," + this.putmode + ",")!=-1) { left = left + clientwidth - this.advertbody.offsetwidth - this.x; } else if(",windowcenter,".indexof("," + this.putmode + ",")!=-1) { left += (clientwidth - this.advertbody.offsetwidth) / 2; } //设置上边距 if(",fly,windowlefttop,windowrighttop,pagelefttop,pagerighttop,".indexof("," + this.putmode + ",")!=-1) { top += this.y; } else if(",windowleftbottom,windowrightbottom,pageleftbottom,pagerightbottom,".indexof("," + this.putmode + ",")!=-1) { top += clientheight - this.advertbody.offsetheight - this.y; } else if(",windowcenter,".indexof("," + this.putmode + ",")!=-1) { top += (clientheight - this.advertbody.offsetheight) / 2; } this.advertbody.style.left = left + "px"; this.advertbody.style.top = top + "px"; }; advert.prototype.minimize = function() { //最小化广告 this.isminimize = true; this.advertbody.style.visibility = 'hidden'; var advert = this; window.settimeout(function() { advert.advertbody.onclick = function() { var list = advert.getadverts(advert.advertputid); for(var i=0; i=0; i--) { if(parentnode.childnodes[i].id!="closeadvert" && parentnode.childnodes[i].id!="minimizeadvert") { findactions(parentnode.childnodes[i]); } else { //关闭广告,最小化广告 parentnode.childnodes[i].onmouseup = function() { var list = advert.getadverts(advert.advertputid); for(var j=0; j