写自己的代码之Ext.OnReady仿写

先推荐一篇关于OnReady的文章,写的很好:http://blog.csdn.net/huxin1/article/details/5483251

Ext源码看了不少时间了,很多东西没有搞懂,不急,慢慢来,下面是我下午抽空对Ext.OnReady仿写。

/* 插件版本信息*/
	var Lucky = { version : '1.0' };
	
	/* 浏览器判别*/
	var agent = navigator.userAgent.toLowerCase();
	Lucky.isIE = /msie/.test(agent)&&!/opera/.test(agent);
	Lucky.isChrome = /chrome/.test(agent);
	Lucky.isFF = /firefox/.test(agent);
	/* Event事件*/
	Lucky.Event = function(name){
		this.name = name;    //事件名
		this.Listeners = [];//监听函数数组
	}
	Lucky.Event.prototype = {
		//增加一个事件的监听函数
		addListener : function(name,ftn){   //监听函数名 、 监听函数体
			//判段该监听函数是否在集合存在
			if(this.findListener(name,ftn) == -1){
				//不存在创建、并添加
				var temp = this.createListener(name,ftn);
				this.Listeners.push(temp);
				
			}
		},
		//查找监听函数
		findListener : function(name,ftn){                     //{fn : xx , ne : xx }
			var len = this.Listeners.length-1;
			while(len >= 0){
				var temp = this.Listeners[len];
				if(temp.fn == ftn && temp.ne == name){
					return len;
				}
				len--;
			}
			return -1;
		},
		//创建监听函数
		createListener : function(name,ftn){
			var obj = {
				fn : ftn,
				ne : name
			}
			return obj;
		},
		
	   //删除一个事件的监听函数
	   removeListener : function(name,ftn){
	   		var index,flag = false;
	   		if(index = this.findListener(name,ftn) != -1){
	   			this.Listeners.splice(index,1);
	   			flag = true;
	   		}
	   		return flag;
	   },
	  //执行一个事件的所有监听函数
	  fireListener : function(){
	  	var len = this.Listeners.length-1;
	  	var arg =  Array.prototype.slice.apply(arguments);   //将argument对象转成数组
	  	while(len >= 0){
	  		var temp = this.Listeners[len];
	  		var fn = temp.fn;
	  		if(fn.apply(window,arg) === false){  //undefined == false 但是 !== false
	  			return false;
	  		}
	  		len--;
	  	}
		return true;	
	  }
	}
	/* OnReady */
	var onReady,flag;
	Lucky.OnReady = function(ftn){
		if(!onReady){                                  //如果监听事件不存在创建,只监听一次
			onReadyEt = new Lucky.Event('onready');
			onReadyEt.addListener('init',ftn);                 //添加监听函数
			if(Lucky.isFF || Lucky.isChrome){
				flag = true;
				document.addEventListener('DOMContentLoaded',MidFtn,false);   //写了不少,其实就这一句话才是OnReady的关键
			}else if(Lucky.isIE){
				(function(){
					try{
					document.documentElement.doScroll("left");
					}catch(error){
						setTimeout(arguments.callee, 0 ); 
						return;
					}
					MidFtn();
				})();
				//document.attachEvent('onload',MidFtn,false);
			}
		}
		function MidFtn(){
			onReady = '^_&';        //控制开关
			if(flag)
				document.removeEventListener("DOMContentLoaded", MidFtn, false);
			onReadyEt.fireListener();
		}
	}
	
	/* 测试*/
	Lucky.OnReady(function(){
		alert('能正常使用!');
	})


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值