事件(上)


事件(上)

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;
}
}


相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2021-08-08
  • 2021-10-29
  • 2021-11-26
猜你喜欢
  • 2021-08-28
  • 2022-02-01
  • 2021-12-15
  • 2022-12-23
  • 2021-12-19
  • 2021-12-06
  • 2021-07-28
相关资源
相似解决方案