您的位置:首页 > Web前端 > JavaScript

javascript 事件模型 及 event对象属性总结

2013-07-16 17:45 621 查看
W3c 事件模型也就是标准事件模型,执行顺序分为3个阶段,捕获阶段,目标阶段,冒泡阶段。
捕获阶段:指由document节点向子节点逐级传播,只要某个子节点注册了相同类型的事件,就会执行绑定的事件函数,直到目标节点停止;
目标阶段:执行目标节点上绑定的事件处理函数;
冒泡阶段:跟捕获阶段相反,会由目标节点向父节点逐级冒泡,只要某个父节点注册了相同类型的事件,就会执行绑定的事件函数,直到document节点停止;

IE下没有 捕获阶段;

W3C注册事件的方法是 addEventListener ,它需要传入三个参数 eventType(事件类型 string)、handler(事件函数 function)、useCapture(是否捕获 boolean)。前两个常用都明白,只介绍下第三个参数,useCapture值为true时,事件处理函数会在捕获模式下触发执行;设为false时,事件处理函数会在冒泡模式下触发执行;所以为了跟IE统一,一般都是设为false,使用冒泡模式触发;

 对此我们以实例求证:

<div id="div1">
1
<div id="div2">
2
<div id="div3">
3
</div>
</div>
</div>


var d1 = document.getElementById("div1");
var d2 = document.getElementById("div2");
var d3 = document.getElementById("div3");
document.addEventListener("click",function(){alert(this.nodeName)},true);
document.addEventListener("click",function(){alert(this.nodeName)},false);
d1.addEventListener("click",function(){alert(this.id)},true);
d1.addEventListener("click",function(){alert(this.id)},false);
d2.addEventListener("click",function(){alert(this.id)},true);
d2.addEventListener("click",function(){alert(this.id)},false);
d3.addEventListener("click",function(){alert(this.id)},true);
d3.addEventListener("click",function(){alert(this.id)},false);


点击div3,他的弹出信息依次是:#document,div1,div2,div3,div3,div2,div1,#document。

IE注册事件的方法是 attachEvent,需要传入两个参数,eventType(事件类型 string,注:需要前面+"on"),handler(事件函数 function);

 为了兼容所有浏览器方便使用,我们一般都会对其进行封装,示例:

var Events=(function(){
var addListener,removeListener,fire;
if(typeof window.addEventListener === "function"){
addListener=function(el,type,handler){
el.addEventListener(type,handler,false);
};
removeListener=function(el,type,handler){
el.removeEventListener(type,handler,false);
};
fire=function(el,type){
el[type]();
};
}else if(typeof document.attachEvent === "function"){
addListener=function(el,type,handler){
el.attachEvent("on"+type,handler);
};
removeListener=function(el,type,handler){
el.detachEvent("on"+type,handler);
};
fire=function(el,type){
el[type]();
};
}else{
addListener=function(el,type,handler){
el["on"+type]=handler;
};
removeListener=function(el,type,handler){
el["on"+type]=null;
};
fire=function(el,type){
el[type]();
};
}
return {
addListener:addListener,
removeListener:removeListener,
fire:fire
}
})();
//调用:
Events.addListener(document,"click",function(event){
event = event||window.event;
alert(typeof event.srcElement);
});
Events.fire(document.getElementById("js_name"),"click");


删除事件 W3C用 removeEventListener(eventType,handler,useCapture);IE用detachEvent(eventType,handler);不再举例;

event 对象:

获取对象一般用var event = window.event | evt;//evt传进来的evt;

IE事件属性W3C事件属性介绍
altKeyaltKey设置或获取 Alt 键的状态,当前状态的值 true (按下) 或 false (没按下)
ctrlKeyctrlKey设置或获取 Ctrl 键的状态,当前状态的值 true (按下) 或 false (没按下)
shiftKeyshiftKey设置或获取 Shift 键的状态,当前状态的值 true (按下) 或 false (没按下)
clientXclientX设置或获取鼠标指针相对于用户浏览器客户区域左边缘 X 轴距离 (不包括浏览器操作控件和滚动条)
clientYclientY设置或获取鼠标指针相对于用户浏览器客户区域上边缘 Y 轴距离(不包括浏览器操作控件和滚动条)
screenX screenX 设置或获取鼠标指针相对于屏幕左边缘在 X 轴上距离
screenYscreenY 设置或获取鼠标指针相对于屏幕上边缘在 Y 轴上距离
offsetXlayerX 设置或获取鼠标指针相对于触发对象在 X 轴上偏移量
offsetY layerY设置或获取鼠标指针相对于触发对象在 Y 轴上偏移量
xpageX设置或获取鼠标指针相对于一个相对定位父元素的左边缘 X 轴上的距离
ypageY设置或获取鼠标指针相对于一个相对定位父元素的上边缘 Y 轴上的距离
cancelBubble stopPropagation()设置或获取当前事件是否要在事件处理函数中向上冒泡,true (允许) false(不允许)
returnValuepreventDefault() 设置或获取事件的返回值,true (事件中的值被返回) false(源对象上的默认操作被取消)
fromElementrelatedTarget设置或获取事件发生时激活的对象或鼠标将要离开的对象
srcElement target设置或获取出发事件的对象,也就是发生事件的文档元素
keyCodekeyCode 设置或获取与触发事件的按键相关联的按键代码(Unicode),改属性与keydown,keypress,keyup配合使用,默认则为0,String.fromCharCode(event.keyCode)转换编码为字符串
typetype从event中获取事件名称,如:click,mouseover..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: