事件传播三个阶段:
1,捕捉阶段,事件从对象沿着文档树向下传播给目标节点。2,目标节点触发阶段:在目标上的适合的事件处理程序将运行。3,气泡阶段,在这个阶段,事件将从目标元素向上传播或者气泡回对象的文档层次。
ie和ff下的事件传播阶段应该是一样的。但是两个浏览器依据的模型有区别。
先看firefox
由于firefox支持dom2的时间模型,用法可以直接这样:
function test(event){ alert(event.clientX); } ele.addEventListener('click',test,true);//ele为某dom元素
关于这个模型(event可以理解为一个全局变量)
| DOM2的事件模型函数 | 作用 |
| addEventListener | 添加事件监听函数。 |
| removeEventListener | 删除事件监听函数。 |
| preventDefault | 组织默认事件的发生 |
| stopPropagation | 可以组织事件从当前正在处理它的节点传播 |
| createEvent | 创建事件 |
| Event属性 | 作用 |
| type | 发生的事件的类型 |
| target | 发生事件的节点 |
| currentTarget | 发生当前在处理的事件的节点 |
| eventPhase | 指明了当前事件传播过程。 Event.CAPTURING_PHASE, Event.AT_TARGET, Event.BUBBLING_PHASE |
| timestamp | 一个Date对象,声明了事件何时发生 |
| bubbles | 一个布尔值,是否在文档树中气泡 |
| cancelable | 一个布尔值,是否能用preventDefault |
作用的对象类型DOMFocusIn,DOMFocusOut和DOMActivate
| UIEvent属性 | 作用 |
| view | 发生事件的Window对象 |
| detail | 一个数字,对于click事件,mousedown,mouseup的事件。1代表点击一次,2代表双击,3代表点击三次。 对于DOMActivate事件,这个字段的值为1,表示正常激活,2表示超级激活,例如双击鼠标或同时按下Shift和Enter键。 |
| MouseEvent属性 | 作用 |
| button | 0表示左键,1表示中间键,2表示右键。 |
| altKey,ctrlKey,metaKey ,shitKey |
是否Alt键,Ctrl键,Meta键,Shift键。 |
| clientX,clientY | 声明鼠标指针相对客户区或浏览器窗口的X坐标和Y坐标。 |
| screenX,screenY | 声明鼠标指针相对于用户显示器的左上角X坐标和Y坐标。 |
| relateTarget | 对于mouseover事件,它是鼠标移动到目标上时所离开的那个节点。对于mouseout事件,他是离开目标时,鼠标进入节点。 |
再来看看ie
ie不支持dom2事件模型,但是可以用window.event来获得event对象,用法可以这样:
ele.onclick=function(){ alert(window.event.clientX); }//ele为某dom元素
window.event包含的属性和方法:
| Event属性 | 作用 |
| type | 与DOMEvent的type相同 |
| srcElement | 发生事件的文档元素。与DOM Event对象的target属性兼容 |
| button | 1表示左键,2表示右键,4表示中间键 |
| clientX,clientY | 同DOM的MouseEvent对象的同名属性兼容 |
| offsetX,offsetY | 相对于源元素的位置。 |
| altKey,ctrlKey, shitfKey |
同DOM |
| keyCode | 得到Keydown,keyup事件的键代码的Unicode |
| fromElement, toElement |
fromElement声明mouseover事件中鼠标移动过的文档元素。 toElement声明mouseout事件中鼠标移到文档元素。它们等价于2级DOM中的MouseEvent对象的relatedTarget属性。 |
| cancelBubble | 把它设为true,可以组织当前事件进一步气泡到包容层次的元素。 |
| returnValue | 可以组织浏览器执行与事件相关的默认动作。 |
ie 和firefox 到底哪个更好呢?有的人说火狐更好点。
回复
理论上是ff了
回复
个人更喜欢用FF,但从做站的角度出发,两个都得兼顾
回复
回复
FF的DOM2模型中的target和currentTarget有什么区别呢?
回复