事件(上)



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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值