都是干货,标题自己选

243 阅读4分钟

一、dom注册事件的两种语法

1.点语法注册事件 :   事件源.事件类型 = 事件处理函数 
            * 特点:  无法注册 ‘同名事件’ , 后者覆盖前者
    1.点语法注册事件 :   事件源.事件类型 = 事件处理函数  

2.addEventListener() : 事件源.addEventListener('事件类型',事件处理函数)
            * 特点: 可以注册 ‘同名事件’
   2.addEventListener() : 事件源.addEventListener('事件类型',事件处理函数)
   * @description:注册同名事件
   * @param {string} 事件类型  不要on,   click  mouseenter 
   * @param {function} 事件处理函数 
   * @return: 
   
具名函数的fn解读
 fn:  变量取值。 取出的是fn的地址
 n(): 函数调用。 取出的是fn的返回值

二、 阻止默认事件

1.默认事件: html中有少部分的标签自带点击事件. 例如:  a标签、form标签
2.默认事件对开发影响: a标签和form标签,如果自己也注册了点击事件,则会(1)先执行注册的点击 (2)后自动执行默认点击跳转页面
3.阻止默认跳转应用 :  如果想给a标签 或 form标签注册点击事件,就需要阻止默认跳转事件
   (1)方式一:    e.preventDefault()
   (2)方式二:   设置a标签的href  <a href="javascript:;"></a>

三.引用类型赋值

1.任何数据类型共同点(值类型,引用类型)
   * 都有变量赋值特点
2.引用类型特点
* 数: 函数名()
* 数组: 数组名[下标]
* 对象: 对象名.属性名
 //函数
        let fn = function(){
            alert(1111)
        }
        //引用类型也是数据类型,也拥有变量赋值的特点
        let a = fn
        //函数语法:  函数名()
        let res = fn()//返回值undefined

        //数组
        let arr = [10,20,30]
        //引用类型也是数据类型,也拥有变量赋值的特点
        let arr1 = arr
        //数组语法 :  数组名[下标]
        let num = arr[0]//10

        //对象
        let obj = {name:'张三',age:30}
        //引用类型也是数据类型,也拥有变量赋值的特点
        let obj1 = obj
        //对象语法:  对象名.属性名
        let name = obj.name//'张三'

        console.log(fn,arr,obj)
        console.log(a,arr1,obj1)


        /* 高阶函数: 把函数作为参数 或 返回值  (函数也是数据类型,也可以赋值) */
        function test(a){
            console.log( a )
            return function(){alert(1111)}
        }

        let res = test()
        

四、事件对象介绍

1.事件对象 :  存储与事件相关的数据
2.事件对象存储 : 当用户触发事件的时候,浏览器会自动捕捉触发相关的数据(鼠标坐标点、键盘按键)等信息,自动存入一个对象中,这个对象叫做事件对象
3.事件对象获取: 给事件处理函数添加形参    event  ev  e 
4.件对象语法 :
 声明: 浏览器在触发事件的时候,自动存储触发数据(鼠标坐标、键盘按键)
取值: 给事件处理函数添加形参  e
 5.事件对象常用属性和方法
 e.pageX / e.pageY : 鼠标触发点到页面 左上角 距离

五、事件对象的总结

      oninput : 键盘输入 (一般用于实时获取输入框'内容') 
      onfocus : 键盘成为焦点 
      onblur :  键盘失去焦点
      onkeydown : 键盘按下( 一般用于获取按键 ) 
      onkeyup : 键盘松开


    2.如何获取用户按键
      e.key : 按键字符串    确认键: 'Enter'
      e.keyCode : 键盘ASCII码(键盘上的每一个按键对应一个数字,称之为ASCII码)   
        确认键ASCII码:  13

六、事件流和事件委托

 1.事件冒泡 : 当触发子元素的事件时候,所有的父级元素‘同名事件’会被依次触发
       1.1 规则:  子元素->父元素->body->html->document->window
       1.2 应用场景:  事件委托技术 

    2.事件委托应用  :  给‘动态新增’元素注册事件

      2.1 什么是事件委托 :  给父元素注册事件,委托子元素处理
      2.2 事件委托原理 : 事件冒泡
      2.3 事件委托注意点 : 
        this : 不能使用。 this指向父元素
        e.target : 推荐使用。 事件目标指向触发冒泡的子元素

    /* 为什么动态新增元素无法注册事件:
    (1)当页面加载的时候,这些元素并不存在。所以一开始根本获取不到
    (2)动态新增元素,不知道它什么时候被创建,也不知道创建多少个
    
      3.如何注册捕获类型事件 :  元素.addEventListener('事件类型',事件处理函数,true)
        * 其他的方式如 点语法,addEventListener默认都是冒泡事件
        
    小结:事件流的三个阶段
         1.事件冒泡 : 当触发子元素的事件时候,所有的父级元素‘同名事件’会被依次触发
         1.1 规则:  子元素->父元素->body->html->document->window
         1.2 应用场景:  事件委托技术 

      2.事件捕获 : 当触发子元素的事件时候,先从最顶级父元素,一级一级往里触发
        1.1 规则:  window->document->html->body->父元素->子元素

      3.默认情况下,所有的注册事件都是冒泡事件。 只有唯一一种方式可以注册捕获事件:
        元素.addEventListener('事件类型',事件处理函数,true)
      
      4.事件流三个阶段:  e.eventPhase
        1-捕获阶段
        2-目标阶段
        3-冒泡阶段
        
    5.阻止事件流动 : e.stopPropagation()
     * 写在哪个事件处理函数中,就从哪里开始阻止