木子屋 Dnawo's BLOG

浮动广告类

👤 dnawo 📅 2009-07-22 👁 4891 👍 0 💬 0 🔄 来源:本站原创
/*
 *	File: KM.AD.js
 *	Description: KaiMo advertisement Class
 *	Author: Dnawo
 *	Date: 2009-07-22
 *
 *	e.g.
 *
 *	var ad = new KM.AD();
 *	ad.LeftTop = new KM.ADInfo("<a href='#' target='_blank'><img src='ad.gif' border='0' /></a>",137,182);
 *	ad.RightTop = new KM.ADInfo("<a href='#' target='_blank'><img src='ad.gif' border='0' /></a>",137,182);
 *	ad.LeftMiddle = new KM.ADInfo("<a href='#' target='_blank'><img src='ad.gif' border='0' /></a>",137,182);
 *	ad.RightMiddle = new KM.ADInfo("<a href='#' target='_blank'><img src='ad.gif' border='0' /></a>",137,182);
 *	ad.LeftBottom = new KM.ADInfo("<a href='#' target='_blank'><img src='ad.gif' border='0' /></a>",137,182);
 *	ad.RightBottom = new KM.ADInfo("<a href='#' target='_blank'><img src='ad.gif' border='0' /></a>",137,182);
 *	ad.Start();
 */
(function(){
		  
	//Namespace
	if(!window.KM)window.KM={};
	if(typeof window.KM != "object")throw new Error("'window.KM' is not an object!");
	
	//Model Class
	KM.ADInfo = function(html,width,height)
	{
		this.Html = html || "";
		this.Width = typeof width == "number" ? width : 0;
		this.Height = typeof height == "number" ? height : 0;
	}
	KM.ADInfo.prototype.toString = function(){
		return "Html:" + this.Html + "\r\n" +
				"Width:" + this.Width + "\r\n" +
				"Height:" + this.Height + "\r\n";
	};
	
	//AD Class
	KM.AD = function()
	{
		/*private members*/
		
		//delay time, (milliseconds)
		var _delay = 50; 
		//object initialize
		var _initialize = function(html,width,height){
			var div = document.createElement("div");
			div.id = "km_" + (new Date()).getTime();
			div.style.position = "absolute";
			div.style.backgroundColor = "#FFFFFF";
			div.style.overflow = "hidden";
			div.style.top = "0px";
			div.style.left = "0px";
			div.style.width = width + "px";
			div.style.height = height + "px";
			div.innerHTML = html;
			try{document.getElementsByTagName("body").item(0).appendChild(div)}catch(ex){};
					
			return div;
		}
		//delete the unit
		var _deleteUnit = function(text){ return Math.round(("" + text).replace(/(px)$/g,""));};
		//
		var _me = this;
		
		/*public members*/
		
		this.Version = "1.0";
		this.Html = "";
		this.Width = 0;
		this.Height = 0;
		
		this.LeftTop = {}; //type of ADInfo
		this.RightTop = {}; //type of ADInfo
		this.LeftMiddle = {}; //type of ADInfo
		this.RightMiddle = {}; //type of ADInfo
		this.LeftBottom = {}; //type of ADInfo
		this.RightBottom = {}; //type of ADInfo

		this.Start = function(){
			if(this.LeftTop instanceof KM.ADInfo && !this.LeftTop.Element)
				this.LeftTop.Element = _initialize(this.LeftTop.Html,this.LeftTop.Width,this.LeftTop.Height);
			if(this.RightTop instanceof KM.ADInfo && !this.RightTop.Element)
				this.RightTop.Element = _initialize(this.RightTop.Html,this.RightTop.Width,this.RightTop.Height);
			if(this.LeftMiddle instanceof KM.ADInfo && !this.LeftMiddle.Element)
				this.LeftMiddle.Element = _initialize(this.LeftMiddle.Html,this.LeftMiddle.Width,this.LeftMiddle.Height);
			if(this.RightMiddle instanceof KM.ADInfo && !this.RightMiddle.Element)
				this.RightMiddle.Element = _initialize(this.RightMiddle.Html,this.RightMiddle.Width,this.RightMiddle.Height);
			if(this.LeftBottom instanceof KM.ADInfo && !this.LeftBottom.Element)
				this.LeftBottom.Element = _initialize(this.LeftBottom.Html,this.LeftBottom.Width,this.LeftBottom.Height);
			if(this.RightBottom instanceof KM.ADInfo && !this.RightBottom.Element)
				this.RightBottom.Element = _initialize(this.RightBottom.Html,this.RightBottom.Width,this.RightBottom.Height);
				
			var clientWidth = document.documentElement.clientWidth;
			var clientHeight = document.documentElement.clientHeight;
			var scrollTop = document.documentElement.scrollTop;
			var scrollLeft = document.documentElement.scrollLeft;
			
			if(this.LeftTop.Element){
				this.LeftTop.Element.style.top = _deleteUnit(scrollTop) + "px";
				this.LeftTop.Element.style.left = _deleteUnit(scrollLeft) + "px";
			}
			if(this.RightTop.Element){
				this.RightTop.Element.style.top = _deleteUnit(scrollTop) + "px";
				this.RightTop.Element.style.left = _deleteUnit(scrollLeft) + _deleteUnit(clientWidth) - _deleteUnit(this.RightTop.Element.style.width) - 2 + "px";
			}
			if(this.LeftMiddle.Element){
				this.LeftMiddle.Element.style.top = _deleteUnit(scrollTop) + _deleteUnit(clientHeight)/2 - _deleteUnit(this.LeftMiddle.Element.style.height)/2 + "px";
				this.LeftMiddle.Element.style.left = _deleteUnit(scrollLeft) + "px";
			}
			if(this.RightMiddle.Element){
				this.RightMiddle.Element.style.top = _deleteUnit(scrollTop) + _deleteUnit(clientHeight)/2 - _deleteUnit(this.RightMiddle.Element.style.height)/2 + "px";
				this.RightMiddle.Element.style.left = _deleteUnit(scrollLeft) + _deleteUnit(clientWidth) - _deleteUnit(this.RightMiddle.Element.style.width) - 2 + "px";
			}
			if(this.LeftBottom.Element){
				this.LeftBottom.Element.style.top = _deleteUnit(scrollTop) + _deleteUnit(clientHeight) - _deleteUnit(this.LeftBottom.Element.style.height) - 2 + "px";
				this.LeftBottom.Element.style.left = _deleteUnit(scrollLeft) + "px";
			}
			if(this.RightBottom.Element){
				this.RightBottom.Element.style.top = _deleteUnit(scrollTop) + _deleteUnit(clientHeight) - _deleteUnit(this.RightBottom.Element.style.height) - 2 + "px";
				this.RightBottom.Element.style.left = _deleteUnit(scrollLeft) + _deleteUnit(clientWidth) - _deleteUnit(this.RightBottom.Element.style.width) - 2 + "px";
			}
			
			setTimeout(function(){_me.Start();},_delay);
		};
		
		this.Clear = function(){
			if(this.LeftTop.Element)this.LeftTop.Element.parentNode.removeChild(this.LeftTop.Element);
			if(this.RightTop.Element)this.RightTop.Element.parentNode.removeChild(this.RightTop.Element);
			if(this.LeftMiddle.Element)this.LeftMiddle.Element.parentNode.removeChild(this.LeftMiddle.Element);
			if(this.RightMiddle.Element)this.RightMiddle.Element.parentNode.removeChild(this.RightMiddle.Element);
			if(this.LeftBottom.Element)this.LeftBottom.Element.parentNode.removeChild(this.LeftBottom.Element);
			if(this.RightBottom.Element)this.RightBottom.Element.parentNode.removeChild(this.RightBottom.Element);
		};		
	};
})();

暂时只支持左上、右上、左中、右中、左下、右下六个位置,通过组合可做成对联广告。

IE(6.0)、FF(2.0)、Opera(9.6)测试通过。

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 构造函数中使用setTimeout引发的问题 下一篇 → JavaScript闭包