js事件 及 事件对象event

2023-10-30

事件类型

鼠标事件

  • click 点击
  • dblclick双击
  • mouseover || mouseenter鼠标移入
  • mouseout || mouseleave鼠标离开

onmouseover和onmouseenter的区别??

onmouseout和onmouseover 存在冒泡

onmouseout和onmouseover是忽略元素之间的层级关系,只看鼠标在哪个元素显示的范围上,存在事件冒泡

mouseenter和mouseleave会受到元素之间的层级关系,默认阻止了事件冒泡机制 键盘事件

 键盘事件

  • keydown键盘按下
  • keyup键盘抬起
  • keypress 键盘按键被按下并释放一个键时发生

在所有浏览器中 onkeypress 事件不是适用于所有按键(如: ALT, CTRL, SHIFT, ESC)。监听一个用户是否按下按键请使用 onkeydown 事件,所有浏览器都支持 onkeydown 事件

只有input、textarea、window、document.documentElement、document.body可以绑定键盘事件

 表单事件

  • input 只要内容(value)改变就会触发(移动端用,代替keyup keydown)
  • change 内容改变并且失焦才触发
  • focus 获取焦点
  • blur 失去焦点

  系统事件

  •    scroll 监听滚动
  •    load 监听页面渲染
  •    resize 监听页面视口大小改变
  •    $(document).ready() jQuery里的ready事件,原生没有。
  •    ready和load区别:ready是页面DOM结构加载完成就会触发,比onload触发早

  移动端事件

  •    click 在移动端可以用,但是有300ms延迟
  •    touchmove 手指移动
  •    touchstart 手指按下
  •    touchend 手指抬起
     

事件定义(3种方法)

直接在HTML中定义元素的事件相关属性(DOM0)(此语法违反了内容与行为的相分离的原则)

在javascript中为元素的事件相关属性赋值(DOM0)

  基于给元素的私有属性赋值,当条件达到触事件发私有属性方法

  •      1.如果元素没有某个事件的私有属性,就不能基于这个方法绑定0级事件
  •      2.只能绑定一个方法,如果多个绑定,只有最后一个绑定上
  •      3.都是冒泡阶段触发

高级事件处理方式(事件监听),一个事件可以绑定多个监听函数(DOM2)

基于浏览器事件池机制来完成的,通过addEventListener往事件池中增加方法,

1.只要浏览器中有这个事件,都可以通过2级事件来绑定,DOMContentLoaded(jquery中的ready事件就是监听这个事件实现的)
2.同一个事件可以绑定多个方法,触发顺序,先绑定的先触发
3.可以人为规定在捕获或冒泡阶段触发,默认是在冒泡阶段
4.DOM2级事件如果不兼容IE的话需要省去on

.移除事件(2种)

1.DOM0级和普通绑定事件,移除事件  btn.οnclick=null;
2.DOM2级, 移除事件


 var btn = document.getElementById("myBtn");
 var handler = function () {
         alert(this.id);
     };
 btn.addEventListener("click", handler, false);
 btn.removeEventListener("click", handler, false); 

DOM事件流

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

dom事件流分为三个阶段

  • 1.捕获阶段,事件对象沿dom树向下传播(由外向里)
  • 2.'目标触发,运行事件监听函数
  • 3.事件冒泡,事件沿dom树向上传播 (有里向外)

我们向水面扔一块石头,首先他会有一个下降的过程,这个过程我们可以理解为从最顶层向事件发生的具体元素(目标点)的捕获过程,之后产生泡泡,会在最低点(最具体元素)之后漂浮到水面上,这个过程相当于事件冒泡

 事件冒泡 IE最早提出 事件开始由具体的元素接收,然后逐级向上传播到dom最顶层节点对的过程

事件捕获 网景最早提出 由DOM最顶层节点开始 然后逐级向下传播到具体的元素接受的过程

[注意]

js只能执行捕获或者冒泡其中的一个阶段

onclick 和attachEvent只能得到冒泡阶段

addEventListener{事件属性, 监听函数,冒泡或捕获阶段}

第三个参数如果是true表示在事件捕获阶段调用事件处理程序如果是false(不写默认是false)表示在事件冒泡阶段调用事件处理函数


    <div id="diva">
        <p id="pb">
            <span id="spanc"></span>
        </p>
    </div>
    <script>
        var diva = document.getElementById("diva");
        var pb = document.getElementById("pb");
        var spanc = document.getElementById("spanc");

        // 冒泡阶段  方向-- -> 由里向外(span-- -> p-----> div)
        diva.onclick = function () {
            alert("div");
        }
        pb.onclick = function () {
            alert("p");
        }
        spanc.onclick = function () {
            alert("span");
        }
        //捕获阶段  方向--->由外向里(div--->p----->span)
        diva.addEventListener("click", function () {
            alert("div");
        }, true)
        pb.addEventListener("click", function () {
            alert("p");
        }, true)
        spanc.addEventListener("click", function () {
            alert("span");
        }, true)

事件代理

事件代理(event delegation):事件代理又称事件委托,是javaScript中绑定事件的常用技巧。顾名思义,‘事件代理’就是把原本需要绑定的事件委托给父元素,让父元素负责事件监听。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能

事件委托的好处:
1.减少事件数量,提高性能
2.预测未来元素,新添加的元素仍然可以触发该事件
3.避免内存外泄,在低版本的IE中,防止删除元素而没有移除事件而造成的内存溢出
 

event对象

定义

  • event就是一个事件对象 写到我们监听函数的小括号里面 当形参来看,
  • 事件对象只有事件才会存在, 他是系统自动创建的,不需要我们传递参数
  • 事件对象是我们事件的一系列 相关数据的集合 跟事件相关的 比如鼠标点击包含了鼠标相关信息 鼠标坐标,如果是键盘事件里面包含了键盘事件的信息,比如 判断用户按下了那个键
  • 这个事件对象我们可以自己命名 比如event evt e
  • 事件对象有兼容性问题 通过window.event

事件对象常用的属性和方法

e.target  e.srcElement 返回触发事件对象

e.type返回事件类型 不带on

e.preventDefult()阻止默认行为

e.stopPropagation 阻止冒泡 (阻止传播)

鼠标事件对象

e.clientX   clientY  返回鼠标相对于浏览器窗口可视区的xy坐标

e.pageX  e.pageY 返回鼠标相对于文档页面的xy坐标

e.screenX e.screenY 返回鼠标相对于电脑屏幕xy坐标

e.offsetX e.offset.Y  返回鼠标相对于自身的xy坐标
 

键盘事件对象

e.key键盘按键内容a--->a

e.code 英文键盘字符a--->keyA

e.keyCode是键盘数字a--->65

e.target和this的区别?

e.target返回的是触发事件的对象, this返回的是绑定事件对象(元素)

区别:e.target点了那个元素就返回那个元素, this那个元素绑定了这个点击事件那么就返回谁

----------------------------------------------------完结,散花------------------------------------------------------------

---------------------------------接受大佬们的批改,欢迎留言------------------------------------------------

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js事件 及 事件对象event 的相关文章

  • 如何更改 JavaScript 对象的顺序?

    我的 JavaScript 对象如下所示 ivrItems 50b5e7bec90a6f4e19000001 name sdf key 555 onSelect fsdfsdfsdf 50b5e7c3c90a6f4e19000002 nam
  • 防止用户在 javascript 中离开我的页面

    在我的表单中 我有一个不显眼的情态 如果用户单击我的 离开图像 我会打开模式并询问他是否想离开 如果用户同意 JavaScript Jquery 是否可以 停止 重新加载或页面更改以显示我的模式并继续操作 重新加载 下一页 上一页等 I t
  • 为什么这个 chrome.browserAction.setIcon 方法不起作用?

    我正在查看文档页面 https developer chrome com extensions browserAction method setIcon我不知道我的代码有什么问题 chrome browserAction setIcon d
  • Node.js - 将数据缓冲到 Ffmpeg

    我使用 Node js 和 Ffmpeg 来创建动画 因为我试图避免第三方 avi mp4 解析器 所以我决定将动画输出为原始 rgb24 数据文件 然后使用一些程序将其转换为 mp4 文件 我发现 Ffmpeg 是免费且开源的 它完全可以
  • 文件操作耗时较长,收到“正在运行[文件、保存、删除创建参与者”消息

    使用 JavaScript React 和 Node 时 会发生在 VSCode 版本 1 52 1 中 我已经在 VSCode 中从事 React 项目几个月了 在那两个月的某个时刻 我开始注意到 VSCode 处理文件操作的速度显着下降
  • Javascript:for 与 jQuery.each() 带时间延迟

    Figure 1 for var i Things length 1 i gt 0 i setTimeout function do something with Things i 200 i Figure 2 things each fu
  • 通过javascript从文件夹中的mp3文件读取id3标签

    我想使用 javascript 从文件夹中的 mp3 文件读取 id3 标签并将其保存到文本文件中 这可能吗 谢谢 This man https github com Tim Smart node id3完成了解析 mp3 文件并提取标签的
  • React + Redux 和 REST API?

    我在 Node 中构建了一个简单的 CRUD 应用程序 并已在 Express 中完成了其余 API 的创建 我现在正在寻求添加前端功能 并希望使用 React Redux 作为学习练习 然而 似乎所有围绕此的教程都直接使用 Redux 访
  • .onLoad 在渲染完成之前调用吗?

    我想在页面加载后调用一些 JS 这可能会涉及延迟 因此我希望首先加载页面 以便显示内容 但似乎调用了 onLoad 处理程序中的代码before渲染完成 是否有更好的事件可以使用 该事件在页面 完成 时触发 澄清一下 我想在页面呈现在屏幕上
  • Javascript crc32 函数和 PHP crc32 与 UTF8 不匹配

    我一直在尝试从 PHP 获取 crc32 函数来匹配 javascript 生成的结果 我已经使用了 4 个不同的 javascript crc32 库 1 http www webtoolkit info javascript crc32
  • JavaScript 检查 Gmail 未读邮件计数

    在javascript中如何获取当前登录的gmail帐户的未读电子邮件数量 相关问题 Google 是否提供有关此类内容的任何文档 这是您正在寻找的文档 http code google com apis gmail docs http c
  • 随机字体颜色

    我需要用 2 或 3 种随机颜色为文本着色 我如何在 PHP 或 JavaScript 中执行此操作 color str pad sprintf x x x rand 0 255 rand 0 255 rand 0 255 6 rand 0
  • 在 jQuery 中,如果我有一个开始类和结束类,我如何用 div 包装多个元素

    好的 这里有一些 html 我有一些开始和结束课程 但为此我只添加了每门课程 1 门 div span nbsp span div div span nbsp span div div class start lt start span n
  • 使用 useCallback 并使用先前状态作为参数设置新对象状态

    考虑这个带有自定义表单钩子的基本表单字段组件来处理输入更改 import React useState useCallback from react const useFormInputs initialState gt const val
  • 使用 jQuery 从字符中获取文本

    我想在出现特定字符后从字符串中获取文本 比方说 文本文本文本 abc 我想得到 abc jquery 中这是如何完成的 这对某些人来说可能是微不足道的 但我对 jQuery 没有什么经验 你可以这样做 var text texttextte
  • 在tinymce 4中裁剪后上传图像

    我正在开发tinymce 并且已经实现了imagetools 现在 当图像插入到文本编辑器中 然后我编辑 裁剪图像时 它将图像 src 更改为类似的内容blob www localhost asdf ghij 我想要的是裁剪后我可以将此 u
  • 如何在生成的 HTML 页面中隐藏 JavaScript 注释? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有没有办法隐藏生成的页面源中的 JS
  • 动态 getter 和 setter - 一种可能性

    我正在尝试解决最近出现的一个问题 假设我们想要并且知道如何在 javascript 中使用动态 getter 和 setter 就像 php 中的那样 get set 但由于 javascript 没有包罗万象的属性 我们唯一能做的就是提供
  • 如果满足条件,Angular JS 如何添加 CSS 类

    我正在创建一个截断指令 如果字符超过 10 我就会截断文本字符串 然后它将显示 我的目标是编写一个条件 如果字符少于 10 个 则删除 如果有人对我如何实现此目标有任何想法 我会坚持这一点并接受建议 这是我的代码 var app angul
  • 如何强制重新安装 React 组件?

    假设我有一个具有条件渲染的视图组件 render if this state employed return div div

随机推荐

  • uniapp 跳转传参 [‘object‘] 问题解决, 遇坑解决

    普通 号拼接传参不知道什么原因 接收参数时转换数据失败 换成模板传参试试 解决 传 ckgd productList 传参时先转为json 一定要用模板字符串传参 如下 uni navigateTo url pagesA service d
  • MySQL执行器与存储引擎是怎么交互的

    体系结构 1 连接器 2 查询缓存 3 分析器 4 优化器 多个索引 选择哪个索引 join的顺序 5 执行器 调用存储引擎接口获取满足条件的第一行记录 调用存储引擎接口获取满足条件的下一行记录 6 存储引擎 索引下推 假设现子表T有字段
  • c++泛型算法扩展和迭代器、反向迭代器

    cout lt lt 插入迭代器 lt lt endl back inserter 创建一个使用push back的迭代器 front inserter 创建一个使用push front的迭代器 inserter 创建一个使用insert的
  • bee-box

    这篇博客就是为了记下bee box做题过程 随便记记 免得忘了 安装 先去官网下载了 然后分个新的盘单独放进去 打开虚拟机 双击bee box vmx就能安装了 打开里面的火狐会自动跳去一个登录界面 默认账号和密码是bee bug 登录然后
  • GitHub 源代码被泄露了...

    阅读本文大概需要 4 分钟 来自量子位 GitHub 忽然 开源 了自己代码的一部分 还将它放在了 GitHub 上 事件起因是这样的 TypeScript 的开发者 Resynth 忽然 Po 了篇文章 表示代码托管服务 GitHub 的
  • 【牛客网OJ题】不要二

    题目描述 二货小易有一个WH的网格盒子 网格的行编号为 0 H 1 网格的列编号为0 W 1 每个格子至多可以放一块蛋糕 任意两块蛋糕的欧几里得距离不能等于2 对于两个格子坐标 x1 y1 x2 y2 的欧几里得距离为 x1 x2 x1 x
  • spring注解:@Autowired、@Qualifier、@Primary

    Autowired 默认情况下 Autowired 按类型装配 Spring Bean 如果容器中有多个相同类型的 bean 则框架将抛出 NoUniqueBeanDefinitionException 以提示有多个满足条件的 bean 进
  • Raki的读paper小记:SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions

    Abstract Introduction Related Work 研究任务 改进大模型遵循指令的能力 SELF INSTRUCT提供了一种几乎无需注释的方法来使预训练语言模型与指令对齐 已有方法和相关工作 许多研究提出使用语言模型进行数
  • Vue 2.0双向绑定原理的实现

    Object defineProperty方法 vue js是采用数据劫持结合发布 订阅者模式的方式 通过Object defineProperty 来劫持各个属性的setter getter 在数据变动时发布消息给订阅者 触发相应的监听回
  • 分布式系统的正确性验证方法

    分布式系统的正确性验证方法 1 Jepsen框架 Jepsen是一个开源的分布式一致性验证框架 可用于验证分布式数据库 分布式消息队列 分布式协调系统 Jepsen探索特定故障模式下分布式系统是否满足一致性 Jepsen框架是一个
  • 用于构建 RESTful Web 服务的多层架构

    文章出自 Bruce Sun Java 架构师 IBM 简介 由于它简便 轻量级以及通过 HTTP 直接传输数据的特性 RESTful Web 服务成为基于 SOAP 服务的一个最有前途的替代方案 在本文中 我们将概述 REST 和 RES
  • 分享63个最常见的前端面试题及其答案

    在前端面试中 各种面试题都会遇到 因此 今天我们整理了60 比较常见繁杂的面试题 希望这些面试题能够对你有所帮助 当然 这些面试题的答案都不是标准答案 只是对答案做了一个简介明了的说明 希望可以快速帮助你梳理重点核心内容 这些答案可以作为参
  • 密码破解---实验八:Windows本地破解用户口令

    目录 一 实验目的及要求 二 实验原理 1 Windows NT 系统密码存储的基本原理 2 SAM的导出方法 三 实验环境 四 实验步骤及内容 五 实验总结 六 分析与思考 一 实验目的及要求 1 了解Windows2000 XP Ser
  • apache服务详解

    APACHE服务 Apache HTTP Server 简称Apache 是Apache软件基金会的一个开放源码的网页服务器 可以在大多数计算机操作系统中运行 由于其多平台和安全性被广泛使用 是最流行的Web服务器端软件之一 它快速 可靠并
  • [机缘参悟-72]:深度思考-人生自省的四重境界:不觉、自觉、觉他、圆满

    前言 人有觉 自觉 觉他 觉行圆满 阐述了人生自省的三重状态 把 不觉 也放入其中 作为在芸芸众生的起点 福 看天下 众生皆苦 从 福 家来看 身体的劳作都算不上真正的苦 福 学中 对于 苦 有不同的认识 可以总结出人世间八大痛苦 此为众生
  • SpringSecurity源码分析(一) SpringBoot集成SpringSecurity即Spring安全框架的加载过程

    Spring Security是一个强大的并且高度可定制化的访问控制框架 它基于spring应用 Spring Security是聚焦于为java应用提供授权和验证的框架 像所有的spring项目一样 Spring Security真正的强
  • osError cannot load library‘Libsndfile.dll‘:error 0x7e

    解决 1 在所给报错路径下 在site packages文件夹下自己创建一个命名为 soundfile data的文件夹 2 下载libsndfile64bit dll文件 下载地址为https github com bastibe lib
  • MySQL8 详细安装步骤 【附安装包】

    一 准备安装包 方式1 云盘 下载 MySQL8 百度云盘下载地址 地址永久有效 链接 https pan baidu com s 1s BH7uizzuwr8P QAJzH4w 提取码 e2xf 方式2 官网下载 MySQL官网下载安装包
  • part2:服务器接收企业微信用户消息

    流程概括 PART1 阿里云服务器配置 购买并配置阿里云服务器 这里选择的是ESC云服务器 centOS7操作系统 配置安全组 开放端口 允许外部访问你的服务器 购买域名并解析到服务器端 申请ssl证书并下载 PART2 远程操作服务器 下
  • js事件 及 事件对象event

    事件类型 鼠标事件 click 点击 dblclick双击 mouseover mouseenter鼠标移入 mouseout mouseleave鼠标离开 onmouseover和onmouseenter的区别 onmouseout和on