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