事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件...

事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第1张图片
Snipaste_2020-07-08_15-52-59.png

1.1 注册事件概述

给元素添加事件,称为注册事件或者绑定事件。
注册事件有两种方式:传统方式和方法监听注册方式

传统注册方式
  • 利用on开头的事件 onclick

    btn.onclick=function(){}
  • 特点:注册事件的唯一性(同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面的处理函数)
方法监听注册方式
  • w3c标准推荐
  • addEventListener()它是一个方法
  • IE9之前的IE不支持此方法,可使用attachEvent()代替
    特点:同一个元素同一个事件可以注册多个监听器
  • 按注册顺序依次执行

1.2addEventListener事件监听方式

eventTarget.addEventListener(type,listener[,useCapture])
eventTarget.addEventListener()方法将指定的监听器注册到eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。

该方法接收三个参数:

  • type:事件类型字符串,比如click、mouseover,注意这里不要带on
  • listener:事件处理函数,事件发生时,会调用该监听函数
  • useCapture:可选参数,是一个布尔值,默认是false。
  
    
    
    

2.1删除事件(解绑事件)

传统注册方式

evenTarget.onclick=null;

方法监听注册方式

1、envenTarget.removeEventListener(type,listener[,useCapture]);
2、envenTarget.detachEvent(eventNameWithOn,callback);

1
2
3

3.1DOM事件流

事件流描述的是从页面中接收事件的顺序。
事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流。


事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第2张图片
Snipaste_2020-07-08_21-27-13.png
  • 事件冒泡:IE最早提出,事件开始时由最具体的元素接收,然后逐级向上传播到DOM最顶层节点的过程。
  • 事件捕获:网景最早提出,由DOM最顶层节点开始,然后逐级向下传播到最具体的元素接收的过程。

4.1事件对象

eventTarget.onclick=function(even){}
eventTarget.addEventListener('click',function(event){})
这里的event就是事件对象,我们还喜欢的写成e或者evt

官方解释:event对象代表事件的状态,比如键盘按键的状态、鼠标的位置、鼠标按钮的状态。
简单解释:事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象event,它有很多属性和方法。
比如:
1、谁绑定了这个事件。
2、鼠标触发事件的话,会得到鼠标的相关信息,比如鼠标位置。
3、键盘触发事件的话,会得到键盘的相关信息,如按了哪个键。

4.1.1事件对象的常见属性和方法

事件对象属性方法 说明
e.target 返回触发事件的对象 标准
e.srcElement 返回触发事件的对象 非标准 ie6-8使用
e.type 返回事件的类型 比如click mouseover 不带on
e.cancelBubble 该属性阻止冒泡 非标准 ie6-8使用
e.returnValue 该属性阻止默认事件(默认行为)非标准 ie6-8使用 比如不让链接跳转
e.preventDefault() 该方法阻止默认事件(默认行为) 标准 比如不让链接跳转
e.stopPropagation() 阻止冒泡 标准

4.1.2 e.target

  div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
  
123
  • abc
  • abc
  • abc

4.1.3 返回事件类型

var div = document.querySelector('div');
        div.addEventListener('click', fn);
        div.addEventListener('mouseover', fn);
        div.addEventListener('mouseout', fn);

        function fn(e) {
            console.log(e.type);

        }

4.1.4 阻止默认行为

// 2. 阻止默认行为(事件) 让链接不跳转 或者让提交按钮不提交
        var a = document.querySelector('a');
        a.addEventListener('click', function(e) {
                e.preventDefault(); //  dom 标准写法
            })
            // 3. 传统的注册方式
        a.onclick = function(e) {
            // 普通浏览器 e.preventDefault();  方法
            // e.preventDefault();
            // 低版本浏览器 ie678  returnValue  属性
            // e.returnValue;
            // 我们可以利用return false 也能阻止默认行为 没有兼容性问题 特点: return 后面的代码不执行了, 而且只限于传统的注册方式
            return false;
            alert(11);
        }

4.2 阻止事件冒泡

事件冒泡:开始时由最具体的元素接收,然后逐级向上传播到DOM最顶层节点
事件冒泡本身的特性,会带来的坏处也会带来好处
两种方式

  • 标准写法:利用事件对象里面的stopPropagation()方法
  • 非标准写法: IE6-8利用事件对象cancelBubble属性
    .father {
            overflow: hidden;
            width: 300px;
            height: 300px;
            margin: 100px auto;
            background-color: pink;
            text-align: center;
        }
        
        .son {
            width: 200px;
            height: 200px;
            margin: 50px;
            background-color: purple;
            line-height: 200px;
            color: #fff;
        }
son儿子

4.3 事件委托

事件委托也称事件代理,在jQuery里面称为事件委派

事件委托的原理

不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。


事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第3张图片
Snipaste_2020-07-09_16-49-18.png

以上案例:给ul注册点击事件,然后利用事件对象的target来找到当前点击的li,因为点击li,事件会冒泡到ul上,ul有注册事件,就会触发事件监听器。

事件委托的作用

只操作了一次DOM,提高了程序的性能。

  • 知否知否,点我应有弹框在手!
  • 知否知否,点我应有弹框在手!
  • 知否知否,点我应有弹框在手!
  • 知否知否,点我应有弹框在手!
  • 知否知否,点我应有弹框在手!

4.4 常见鼠标事件

禁用右键菜单 contextmenu
禁用选中文字 selectstart
 我是一段不愿意分享的文字
    

4.5 鼠标事件对象

event对象代表事件的状态,跟事件相关的一系列信息的集合。现阶段我们主要是用鼠标事件对象MouseEvent和键盘事件对象KeyboardEvent


事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第4张图片
Snipaste_2020-07-09_17-12-14.png
 body {
            height: 3000px;
        }

4.6 跟随鼠标的天使

事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第5张图片
Snipaste_2020-07-09_17-15-55.png

事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第6张图片
Snipaste_2020-07-09_17-16-07.png
    img {
            position: absolute;
            top: 2px;
        }
  
    

4.7 常用键盘事件

键盘事件 触发条件
onkeyup 某个键盘按键被松开时触发
onkeydown 某个键盘按键被按下时触发
onkeypress 某个键盘按键按下时触发 但是它不识别功能键 比如ctrl shift箭头等
 

4.7.1键盘事件对象

keyCode可以返回ASCII码值
我们可以用keyCode返回的ASCII码值来判断用户按下了哪个键
注意:

  • onkeydown和onkeyup不区分字母大小写,onkeypress区分字母大小写。
  • 在我们实际开发中,我们更多的使用keydown和keyup,它能识别所有的键(包括功能键)
  • keypress不识别功能键,但是keyCode属性能区分大小写,返回不同的ASCII值。

4.8京东按键输入内容案例

事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第7张图片
Snipaste_2020-07-09_17-37-50.png
   
    

4.9模拟京东快递单号查询

事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第8张图片
Snipaste_2020-07-10_13-39-57.png

事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件..._第9张图片
Snipaste_2020-07-10_14-21-55.png
   * {
            margin: 0;
            padding: 0;
        }
        
        .search {
            position: relative;
            width: 178px;
            margin: 100px;
        }
        
        .con {
            display: none;
            position: absolute;
            top: -40px;
            width: 171px;
            border: 1px solid rgba(0, 0, 0, .2);
            box-shadow: 0 2px 4px rgba(0, 0, 0, .2);
            padding: 5px 0;
            font-size: 18px;
            line-height: 20px;
            color: #333;
        }
        
        .con::before {
            content: '';
            width: 0;
            height: 0;
            position: absolute;
            top: 28px;
            left: 18px;
            border: 8px solid #000;
            border-style: solid dashed dashed;
            border-color: #fff transparent transparent;
        }

    

你可能感兴趣的:(事件高级:注册事件概述、addEventListener事件监听方法、删除事件、DOM事件流、事件对象、事件对象的常见属性和方法、e.target、返回事件类型、阻止默认行为、阻止事件冒泡、事件...)