Event 基础

131 阅读3分钟

Event 基础

事件是什么

事件是动作

事件仅仅是一个字符串名字,用来通知浏览器窗口内发生了什么动作。动作的发出者可能是用户的输入设备,也可能是浏览器窗口。比如,操作DOM时的一些常见事件:

  • load: 页面加载事件
  • click: 点击事件
  • mouseover: 鼠标悬停事件
  • submit: 提交表单事件
  • keydown: 键盘按下事件

事件的触发

  • 原生事件:即浏览器的内置事件,由浏览器触发。当你单击按钮时,'click'事件自动被浏览器触发;当你三连击或五连击按钮时,该事件不会触发,因为浏览器没有为按钮定义该事件。
  • 自定义事件: 通过元素.dispatchEvent()触发。

事件处理程序

事件处理程序就是事件发生时执行的函数(任务)。

注册事件处理程序

当事件发生时,我们需要为发生事件的元素注册事件处理程序。如果不注册,当事件发生时,什么也不会发生。

从JS的发展历程讲,注册事件处理程序分为四种种方式:

  • HTML事件处理程序
  • DOM0事件处理程序
  • DOM2事件处理程序
  • IE事件处理程序

通过标签属性注册

通过标签的属性注册事件处理程序是HTML提供的方式。

语法

<标签 on事件名称 = "JavaScript代码"></标签>
  • 属性名:以on开头,后紧跟事件名称
  • 属性值: 必须是能够执行的 JavaScript 代码。

演示: 点击按钮时的HTML事件处理程序

<button onclick="console.log('Hello World')">打印</button>
<button onclick="alert('Hello World')">弹窗</button>
<button onclick="alert(&quot;Hello World&quot)">弹窗</button>
<button title="按钮" onclick="fn1()">打印</button>
<button title="按钮" onclick="fn2(this)">打印</button><script>
    function fn1(){
        console.log(this);
    }
    function fn2(value){
        console.log(value);
    }
</script>

通过DOM属性注册

通过DOM属性注册事件处理程序是DOM0中提供的方式。

addEventListener()

定义

通过addEventListener()注册事件处理程序是DOM2中提供的方法。该方法适用于DOM中的所有元素对象。

语法

元素.addEventListener('事件名称',function(ev){},布尔值)
  • 事件名称: 小写的事件名称字符串(不带on)。

  • function: 事件处理函数。

    • ev: 表示事件对象。该处理函数调用时由该方法自动传入的事件对象。
  • 布尔值:

    • true 表示在捕获阶段调用事件处理程序。
    • false(默认值)表示在冒泡阶段调用事件处理程序。

removeEventListener()

removeEventListener()

IE事件处理程序

事件对象

在 DOM 中,当事件被触发后,会自动创建一个event事件对象。 event对象存储了所有与该事件相关的信息。比如触发事件的元素、事件的类型,或特定事件相关信息。

演示:鼠标的点击事件会产生一个event对象,包含点击事件相关的信息

使用addEventListener()注册事件处理程序中的事件对象

<button>按钮</button>
<script>
    const btn = document.querySelector('button')
    btn.addEventListener('click',function(ev){
        console.log(ev);
    },false)
</script>

使用DOM属性注册事件处理程序中的事件对象

<button>按钮</button>
<script>
    const btn = document.querySelector('button')
    btn.onclick = function(ev){
        console.log(ev);
    }
</script>

HTML事件处理程序中的特殊”event“对象

<button onclick="showInfo(event)">按钮</button>
<script>
    function showInfo(ev) {
        console.log(ev)
    }
</script>

输出结果:

click{
    target: <button>,//事件目标元素
    type: "click", //事件类型
    x: 34,
    y: 19,
    clientX: 34,
    clientY: 19,
    screenX: 981,
    screenY: 141,
    offsetX: 0,
    offsetY: 0,
    pageX: 34,
    pageY: 19,
    detail: 1,//事件相关的其他信息
    which: 1,
    altKey: false,
    shiftKey: false,
    ctrlKey: false,
    bubbles: true, //查询事件是否冒泡
    button: 0,
    buttons: 0,
    cancelBubble: false,//查询事件是否可以取消
    cancelable: true,
    composed: true,
    currentTarget: null, //当前事件处理程序所在的元素
    defaultPrevented: false, //false表示未调preventDefault()方法
    eventPhase: 0,//表示调用事件处理程序的阶段:1 代表捕获阶段,2 代表到达目标,3 代表冒泡阶段
    explicitOriginalTarget: <button>,
    isTrusted: true,
    layerX: 34,
    layerY: 19,
    metaKey: false,
    movementX: 0,
    movementY: 0,
    mozInputSource: 1,
    mozPressure: 0,
    originalTarget: <button>,
    rangeOffset: 0,
    rangeParent: null,
    relatedTarget: null,
    returnValue: true,
    srcElement: <button>,
    timeStamp: 3020,
    view: Window http://127.0.0.1:5500/0220/3-click.html,
}

例如,,而键盘操作导致的事件会生成与被按下的键有关的信 息。,尽管支持方式不同