101 事件 [~ie8] 删除事件 以及同一个注册函数进行屏蔽

//base.js

var $=function(_this)//调用,把this传递过来{ return new Base(_this);};//对象式function Base(_this){ //创建一个数组来获取节点和节点的数组 this.elements=[];//私有化,不共用 if(_this!=undefined)//这里的_this是一个对象,undefined也是个对象,却别typeof放回的带单引号的 “undefined” { this.elements[0]=_this; //把this放到数组的第一个 }}//获取ID节点Base.prototype.getId=function(id){ this.elements.push(document.getElementById(id)); return this;};//获取元素节点Base.prototype.getTagName=function(tag){ var tags=document.getElementsByTagName(tag); for(var i=0;i<tags.length;i++) { this.elements.push(tags[i]); } return this;};//class获取Base.prototype.getClass=function(className){ var all=document.getElementsByTagName("*"); for(var i=0;i<all.length;i++) { if(all[i].className==className) { this.elements.push(all[i]); } } return this;};//获取某个节点Base.prototype.eq=function(num){ var element=this.elements[num]; this.elements=[];//清空数组 this.elements[0]=element;//重新赋值 return this;};//设置CSSBase.prototype.css = function (attr, value) { for (var i = 0; i < this.elements.length; i ++) { if (arguments.length == 1) { return getStyle(this.elements[i], attr);//为什么这里需要return呢 } this.elements[i].style[attr] = value; } return this;}Base.prototype.click=function(fn){ for(var i=0;i<this.elements.length;i++) { this.elements[i].onclick=fn; } return this;};//设置innerHtml 获取innerHTMLBase.prototype.html=function(value){ for(var i=0;i<this.elements.length;i++) { if(arguments.length==0) { return this.elements[i].innerHTML; } else { this.elements[i].innerHTML=value; } } return this;};//添加classBase.prototype.addClass=function(className){ for(var i=0;i<this.elements.length;i++) { if(!hasClass(this.elements[i],className))//判断是否已经有这个class { this.elements[i].className+=’ ‘+className; } } return this;};//移出classBase.prototype.removeClass=function(className) //调用方法$().getClass("dd").addClass("a").addClass("b").removeClass("b");{ for(var i=0;i<this.elements.length;i++) { if(hasClass(this.elements[i],className))//判断是否已经有这个class { this.elements[i].className=this.elements[i].className.replace(new RegExp(‘(\\s|^)’+className+'(\\s|$)’),”); } } return this;};//添加link或style的css规则,不常用Base.prototype.addRule=function(num,selectorText,cssText,position) //调用方法, $().addRule(0,"body","background:red",0){ var sheet=document.styleSheets[num]; if(typeof sheet.insertRule!="undefined")//w3c { sheet.insertRule(selectorText+"{"+cssText+"}",position); } else if(typeof sheet.addRule!="undefined")//iE { sheet.addRule(selectorText,cssText,position);//sheet.addRule("body","background:red",) }};//移除link或style的css规则,不常用Base.prototype.addRule=function(num,index) //调用方法,, $().removeRule(0);{ var sheet=document.styleSheets[num]; if(typeof sheet.deleteRule!="undefined")//w3c { sheet.deleteRule(index); } else if(typeof sheet.removeRule!="undefined")//iE { sheet.removeRule(index);//sheet.addRule("body","background:red",) }};//设置hover方法Base.prototype.hover=function(over,out){ for(var i=0;i<this.elements.length;i++) { this.elements[i].onmouseover=over; this.elements[i].onmouseout=out; } return this;};//添加showBase.prototype.show=function(){ for(var i=0;i<this.elements.length;i++) { this.elements[i].style.display="block" } return this;};//添加hideBase.prototype.hide=function(){ for(var i=0;i<this.elements.length;i++) { this.elements[i].style.display="none" } return this;};//设置物体居中Base.prototype.center=function(width,height){ var top=(getInner().height-width)/2; var left=(getInner().width-height)/2; for(var i=0;i<this.elements.length;i++) { this.elements[i].style.top=top+"px"; this.elements[i].style.left=left+"px"; } return this;};//触发浏览器窗口事件Base.prototype.resize = function (fn) { for(var i=0;i<this.elements.length;i++) { var element=this.elements[i]; window.onresize=function() { fn(); if (element.offsetLeft > getInner().width – element.offsetWidth) { element.style.left = getInner().width – element.offsetWidth + ‘px’; } if (element.offsetTop > getInner().height – element.offsetHeight) { element.style.top = getInner().height – element.offsetHeight + ‘px’; } } } return this;};//锁屏功能Base.prototype.lock=function(){ for(var i=0;i<this.elements.length;i++) { this.elements[i].style.width=getInner().width+"px"; this.elements[i].style.height=getInner().height+"px"; this.elements[i].style.display="block"; document.documentElement.style.overflow = ‘hidden’; console.log( this.elements[i].style.width); } return this;};Base.prototype.unlock=function(){ for(var i=0;i<this.elements.length;i++) { this.elements[i].style.display="none"; document.documentElement.style.overflow = ‘auto’; } return this;};//baseBase.prototype.drag=function(){ for(var i=0;i<this.elements.length;i++) { this.elements[i].onmousedown=function(e) { preDef(e); var e=getEvent(e);//阻止默认事件 var _this=this; var diffX= e.clientX-_this.offsetLeft; var diffY= e.clientY-_this.offsetTop; if(_this.setCapture)//iE鼠标拖拽出了目标节点的时候不能再获取到事件 { _this.setCapture(); } document.onmousemove = function (e) { var e = getEvent(e); var left = e.clientX – diffX; var top = e.clientY – diffY; if (left < 0) { left = 0; } else if (left > getInner().width – _this.offsetWidth) { left = getInner().width – _this.offsetWidth; } if (top < 0) { top = 0; } else if (top > getInner().height – _this.offsetHeight) { top = getInner().height – _this.offsetHeight; } _this.style.left = left + ‘px’; _this.style.top = top + ‘px’; }; document.onmouseup=function() { if(_this.releaseCapture)//iE鼠标拖拽出了目标节点的时候不能再获取到事件 { _this.releaseCapture(); } this.onmousemove=null; this.onmouseup=null; } } } return this;};//跨浏览器添加事件绑定function addEvent(obj, type, fn) { if (typeof obj.addEventListener != ‘undefined’) { obj.addEventListener(type, fn, false); } else { //创建一个存放事件的哈希表(散列表) if (!obj.events) obj.events = {}; //第一次执行时执行 if (!obj.events[type]) { //创建一个存放事件处理函数的数组 obj.events[type] = []; //把第一次的事件处理函数先储存到第一个位置上 if (obj[‘on’ + type]) obj.events[type][0] = fn; } else { if(addEvent.equal(obj.events[type],fn)) return false;//如果同一个事件注册了同一个函数,则返回false } //从第二次开始我们用事件计数器来存储 obj.events[type][addEvent.ID++] = fn; //执行事件处理函数 obj[‘on’ + type] =addEvent.exec; }}//为每个事件分配一个计数器addEvent.ID = 1;//执行事件处理函数addEvent.exec=function(event){ var e=window.event;//IE无需组w3c兼容 var es=this.events[e.type]; for (var i in es) { es[i].call(this,e);//把this和e传递进去,这样就能获取到this.value和e.clientX了 }};//同一个注册函数进行屏蔽addEvent.equal = function (es, fn) { for (var i in es) { if (es[i] == fn) return true; } return false;}//跨浏览器移出事件function removeEvent(obj,type,fn){ if(typeof obj.removeEventListener!="undefined") { obj.removeEventListener(type,fn,false); } else { for(var i in obj.events[type])//addEvent的时候已经给obj添加了events { if(obj.events[type][i]==fn) { delete obj.events[type][i]; } } }}

//demo.js

坦然接受生活给你的馈赠吧,不管是好的还是坏的。

101 事件 [~ie8] 删除事件 以及同一个注册函数进行屏蔽

相关文章:

你感兴趣的文章:

标签云: