javascript事件详解

注册、移除事件的三种方式

var box=document.getElementById('box');
//1
box.onclick=function(){
    console.log("点击后执行");
};
box.onclick=null;
//2
box.addEventListener('click',eventCode,false);
box.removeEventListener('click',eventCode,false);

//3
box.attachEvent('onclick',eventCode);
box.detachEvent('onclick',eventCode);

function eventCode(){
    console.log('点击后执行');
}
btn.onclick=function(){
    console.log("111");
};
btn.onclick=function(){
    console.log("222");
};
//只会执行其中一个,这种注册事件的方法不能给同一个元素注册多个事件处理函数。
//addEventListener(是w3c定义的标准方法,但是有兼容性问题,ie9以后才支持)
//优点:可以给同一个元素注册多个事件处理函数
var btn=document.getElementById('btn')
//三个参数含义 事件名 时间处理函数 时间冒泡/事件捕获
btn.addEventListener('click',function(){
    alert('abc')
},false);
btn.addEventListener('click',function(){
    alert('hello')
},false);

封装处理注册事件兼容性问题的函数

function addEventListener(element,eventName,callback){
    if(element.addEventListener){
        //ie9+
        element.addEventListener(eventName,callback,false);
    }else if(element.attachEvent){
        //ie9以前
        element.attachEvent('on'+eventName,callback);
    }else{
        element['on'+eventName]=callback;
    }
}

只执行一次就移除事件的写法
1.

btn.onclick=function(){
    alert("hello");
    this.onclick=null;
}

2.

btn.addEventListener('click',callback,false);
function btnClick(){
    alert('hello');
    //移除事件
    this.removeEventListener('click',btnClick,false);
}

3.

//ie9以前
btn.attachEvent('onclick',btnClick);
function btnClick(){
    alert("hello");
    //移除事件
    btn.detachEvent('onclick',btnClick);
}

封装处理移除事件兼容性问题的函数

function removeEventListener(element,eventName,callback){
    if(element.removeEventListener){
        element.removeEventListener(eventName,callback,false);
    }else if(element.detachEvent){
        element.detachEvent('on'+eventName,callback);
    }else{
        element['on'+eventName]=null;
    }
}

事件冒泡
这里写图片描述
界面与点击box3时的打印结果
这里写图片描述

  • js事件的三个阶段分别为:
    • 捕获:捕获到的其他同样有事件处理函数的对象
    • 目标:点击并执行处理函数的当前对象
    • 冒泡:当点击的对象执行完事件处理函数以后再往父级冒泡(传递)
      第三个参数为true是事件捕获,false事件冒泡

事件冒泡的应用之事件委托

这里写图片描述

关于鼠标事件参数e
这里写图片描述
打印结果:
这里写图片描述
e.type获取事件名
这里写图片描述
这里写图片描述

处理e的兼容性问题
这里写图片描述

鼠标移动事件之跟着鼠标飞的图片
这里写图片描述
但当页面有滚动条时,使用pageX pageY
这里写图片描述
然而pageX pageY在ie9以下存在兼容性问题,这里使用另一种方法
首先,封装获取页面滚动出去的距离的函数:
这里写图片描述
则鼠标在页面中的位置等于鼠标在可视区域中的位置加上滚动出去的距离
这里写图片描述
再次封装:
这里写图片描述
调用:
这里写图片描述

事件对象
这里写图片描述
这里写图片描述

阻止事件冒泡
这里写图片描述
这里写图片描述
取消默认行为
这里写图片描述

获取鼠标在div盒子中的位置
这里写图片描述

键盘事件

  • 常用的键盘事件
    这里写图片描述
    这里写图片描述
  • 回车切换
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值