事件(上)



obj.onlick:

< div style= "width: 100px; height: 100px; background-color:red;position: absolute;left: 0px;" ></ div >
< script type= "text/javascript" >
var div= document. getElementsByTagName( "div")[ 0];
div. onclick= function(){
this. style. backgroundColor= "green";
}
< / script >



点击这个红正方形就会变成绿色

但是这个一个对象的一个处理事件只能实现一个方法


obj.addEventLinstener(type,function,false)

addEventListener

< ul >
< li >0 </ li >
< li >1 </ li >
< li >2 </ li >
< li >3 </ li >
</ ul >
<!-- <div style="width: 100px; height: 100px; background-color:red;position: absolute;left: 0px;"></div> -->
< script type= "text/javascript" >
var liCol= document. getElementsByTagName( "li"),
len= liCol. length;
for( var i= 0; i< len; i++){
( function( i){
liCol[ i]. addEventListener( "click", function(){
console. log( i);
}, false)
}( i))
}
< / script >

这个实现了



点击什么数字打印出什么数字





ele.removeEvetListener()

< div style= "width: 100px; height: 100px; background-color:red;position: absolute;left: 0px;" ></ div >
< script type= "text/javascript" >
var div= document. getElementsByTagName( "div")[ 0];
div. addEventListener( "click", test, false);
function test(){
console. log( "a");
}
div. removeEventListener( "click", test, false);

这样以后就点击不了下面的这个小方块了






事件冒泡:

< div class= "wrapper" >
< div class= "oppset" >
< div class= "dirren" ></ div >
</ div >
</ div >
<!-- <div style="width: 100px; height: 100px; background-color:red;position: absolute;left: 0px;"></div> -->
< script type= "text/javascript" >
var wrapper= document. getElementsByClassName( "wrapper")[ 0];
var oppset= document. getElementsByClassName( "oppset")[ 0];
var dirren= document. getElementsByClassName( "dirren")[ 0];
wrapper. addEventListener( "click", function(){
console. log( "wrapper");
}, false)
oppset. addEventListener( "click", function(){
console. log( "oppset");
}, false)
dirren. addEventListener( "click", function(){
console. log( "dirren");
}, false)



这三个重叠的正方形,点击最小的那个就会打印出:


这就是事件冒泡的意思,好像会“漏”下去一样,因为这三个div结构是嵌套的,所以才会这样,而不是因为视觉上的重叠



事件捕获:

将后面的参数改成true

wrapper. addEventListener( "click", function(){
console. log( "wrapper");
}, true)
oppset. addEventListener( "click", function(){
console. log( "oppset");
}, true)
dirren. addEventListener( "click", function(){
console. log( "dirren");
}, true)


打印的顺序是反的,再来看:

wrapper. addEventListener( "click", function(){
console. log( "wrapper");
}, false)
oppset. addEventListener( "click", function(){
console. log( "oppset");
}, false)
dirren. addEventListener( "click", function(){
console. log( "dirren");
}, false)
wrapper. addEventListener( "click", function(){
console. log( "wrapperB");
}, true)
oppset. addEventListener( "click", function(){
console. log( "oppsetB");
}, true)
dirren. addEventListener( "click", function(){
console. log( "dirrenB");
}, true)

先设定了三个事件执行,再设定了三个事件捕获,点击最小的正方形就会出现:


可以发现点击最小的正方形就会先捕获,然后到了小正方形的时候就会事件执行,然后是最小的正方形的事件捕获,再依次事件执行





event.stopPropagation():

wrapper. addEventListener( "click", function( e){
e. stopPropagation();
console. log( "wrapper");
}, false)
oppset. addEventListener( "click", function( e){
e. stopPropagation();
console. log( "oppset");
}, false)
dirren. addEventListener( "click", function( e){
console. log( "dirren");
e. stopPropagation();
}, false)

这样就会取消冒泡,点击小正方形就会只打印一个:



封装取消绑定的方法:

function stopBubble( event){
if( event. stopPropagation()){
event. stopPropagation();
} else{
event. stopBubble= true;
}
}




取消默认事件的方法:

1.return false

document. oncontextmenu= function(){
console. log( "a");
return false;
}

oncontextmenu是一个网页中点击鼠标右键的一个默认事件,然而这样return false之后单击右键就只会打印a,但是不会出现菜单了



2.event.preventDefault()

这里传入一个对象e,因为系统默认就会给函数加上一个对象e

document. oncontextmenu= function( e){
console. log( "a");
e. preventDefault();
}



3.event.returnValue=false

document. oncontextmenu= function( e){
console. log( "a");
e. returnValue= false;
}



4.封装取消默认事件的函数

function cancelHandeler( event){
if( event. preventDefault()){
event. preventDefault();
} else{
event. returnValue= false;
}
}


猜你喜欢

转载自blog.csdn.net/scwmason/article/details/80934550