js部分兼容处理函数

跨浏览器鼠标按钮:
function(evt){  
	let e=evt||window.event;
	if(evt){
		return e.button;
	}else if(window.event){
		switch(e.button){
		case 1:
			return 0;
		case 4:
			return 1;
		case 2:
			return 2;
		case 0:     //360浏览器
			return 0;
		}
	}
}
//clientX 事件属性返回当事件被触发时鼠标指针向对于浏览器页面(或客户区)的水平坐标,客户区指的是当前窗口。
			function(evt){
				let e=evt||window.event;
				let clientX,clientY;
				clientX=e.clientX;
				clientY=e.clientY
				return {
					clientX,
					clientY
				}
			}
//所有浏览器都支持字符按键。
			function getCharCode(evt){
				let e=evt||window.event;
				if(typeof e.charCode=='number'){
					return e.charCode;
				}else{
					return e.keyCode;
				}
			}
//点击哪里,获取哪里的dom对象。
			function getTarget(evt){
				let e=evt||window.event;
				return e.target||e.srcElement;
			}
//取消冒泡。
			function setStop(evt){
				let e=evt||window.event;
				(typeof e.stopPropagation=='function')?e.stopPropagation():e.cancelBubble=true;
			}

//onload绑定多事情,避免覆盖的思路:

window.onload=function(){
        alert('lee');
    };
    if(typeof window.onload=='function'){
        var saved=null;/*保存上一个事件*/
        saved=window.onload;
    };
    window.onload=function(){
        saved();
        alert('Mr lee');
    }

w3c中的事件绑定:obj.addEventListener('load',fn,false),其中最后的的参数为false时确当当前事件为冒泡,true为捕获

//跨浏览器添加事件:
function addEvent(obj,type,fn){
		if(obj.addEventListener){
			obj.addEventListener(type,fn,false);
		}else if(obj.attachEvent){
			obj.attachEvent('on'+type,fn);
		}
	}

//跨浏览器移除事件:
	
	function removeEvent(obj,type,fn){
		if(obj.removeEventListener){
			obj.removeEventListener(type,fn,false);
		}else if(obj.detachEvent){
			obj.detachEvent('on'+type,fn);
		}
	}
//跨浏览器获取目标对象:
function getTarget(evt){
		if(evt.target){
			return evt.target;
		}else if(window.event.srcElement){
			return window.event.srcElement
		}
	}
//mouseover和mouseout得到鼠标最近移入和移出的dom对象
function getTarget(evt){
		var e=evt||window.event;
		if(e.srcElement){
			if(e.type=='mouseover'){
				return e.fromElement.tagName;
			}else if(e.type=='mouseout'){
				return e.toElement.tagName;
			}
		}else if(e.relatedTarget){
			return e.relatedTarget;
		}
	}
//阻止默认事件:return false阻止默认事件不好的原因,必须放在函数内部最后,下面的兼容的写法
function preDef(evt){
		var e=evt||window.event;
		if(e.preventDefault){
			e.preventDefault();
		}else{
			e.returnValue=false;
		}
	}
//滚轮事件:
		function WheelDetail(evt){
			let e=evt||window.event;
			if(e.wheelDelta){
				return e.wheelDelta;
			}else if(evt.detail){
				return -evt.detail*30;
			}
		}

猜你喜欢

转载自blog.csdn.net/aliven1/article/details/88523977
今日推荐