绑定事件的模型

 

种事件流模型html

1,冒泡事件流模型:从特定的事件到不特定事件,即从Dom树的叶子到根节点
2,捕获事件流模型:从不特定的事件到特定的事件,即根节点到Dom树的节点
从冒泡型事件流中click事件流的顺序为:div->body->html->document
从捕获型事件流中click事件流的顺序为:document->html->body->div;
DOM2的事件流的顺序
事件捕获->目标对象->事件冒泡
3,事件流的案例事件代理-事件委托
优势:
1,经过冒泡的思想减小了对子节点绑定的特色,不用使用for循环,
2,而是对父节点进行绑定,事件处理器要驻流内存,提升了性能

原生的案例jquery

捕获事件->目标对象(2次)——>事件冒泡  性能

<! DOCTYPE html >
< html >

< head lang= "en" >
< meta charset= "UTF-8" >
< title ></ title >
</ head >
< style >
#outer {
position: absolute;
width: 400px;
height: 400px;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;
background-color: deeppink;
}

#middle {
position: absolute;
width: 300px;
height: 300px;
top: 50%;
left: 50%;
margin-left: -150px;
margin-top: -150px;
background-color: deepskyblue;
}

#inner {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
margin-left: -50px;
margin-top: -50px;
;
background-color: darkgreen;
text-align: center;
line-height: 100px;
color: white;
}

#outer,
#middle,
#inner {
border-radius: 100%;
}
< / style >

< body >
< div id= "outer" >
< div id= "middle" >
< div id= "inner" >
click me!
</ div >
</ div >
</ div >
< script >
var innerCircle = document. getElementById( "inner");
innerCircle. addEventListener( "click", function () {
alert( "innerCircle的click事件在捕获阶段被触发");
}, true);
innerCircle. addEventListener( "click", function () {
alert( "innerCircle的click事件在冒泡阶段被触发");
}, false);
var middleCircle = document. getElementById( "middle");
middleCircle. addEventListener( "click", function () {
alert( "middleCircle的click事件在捕获阶段被触发");
}, true);
middleCircle. addEventListener( "click", function () {
alert( "middleCircle的click事件在冒泡阶段被触发");
}, false);
var outerCircle = document. getElementById( "outer");
outerCircle. addEventListener( "click", function () {
alert( "outerCircle的click事件在捕获阶段被触发");
}, true);
outerCircle. addEventListener( "click", function () {
alert( "outerCircle的click事件在冒泡阶段被触发");
}, false);
< / script >

</ body >

</ html >

 

1、原生的写法spa

  var handleEent = {代理

addEventListener : function ( element, type, handler) {
if ( element. addEventListener) {
element. addEventListener( type, handler, false);
} else if ( element. attachEvent) {
element. attachEvent( type, handler);
} else {
element[ 'on' + type] = handler;
}
},
removeEentListener : function ( element, type, handler) {
if ( element. removeEentListener) {
element. removeEentListener( type, handler, false);
} else if ( element. deattachEvent) {
element. deattachEvent( type, handler);
} else {
element[ 'on' + type] = handler;
}
}
};

 

2、 jquery的绑定事件处理方案jquery的绑定的事件on, bind(), delegate(), live() )的区别htm

  1bind只能用于存在元素的绑定对象

2live采用事件代理绑定到document上
3,delegate: 采用的是事件代理将元素更加精确小的范围内使用事件代理
4,on: 集中了以上全部的优势
相关文章
相关标签/搜索