深入了解JavaScript事件绑定:实现高效可靠的事件处理

​🌈个人主页:前端青山
🔥系列专栏:JavaScript篇
🔖人终将被年少不可得之物困其一生

依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-事件绑定方式

目录

事件绑定方式

什么是事件

DOM0级 事件

DOM0级事件绑定

DOM2级 事件绑定

事件解绑方式

DOM0级事件解绑

DOM2级事件解绑

事件对象的认识

什么是事件对象?(类似于飞机上的黑匣子、汽车上的行车记录仪、教室中的摄像头)

如何获取事件对象?

事件对象内鼠标相关信息

鼠标的相对坐标值:(鼠标相对于所在对象上的坐标值)

鼠标的可视区坐标值:(当前鼠标触发点距离当前窗口左上角的X/Y坐标)

鼠标的绝对坐标值:(当前鼠标触发点距离BODY左上角的X/Y坐标(IE9以下没有这两个属性)

事件对象内键盘相关信息

altKey / shiftKey / ctrlKey / metakey

事件绑定方式

什么是事件

  • 一个事件由什么东西组成

    • 触发谁的事件:事件源

    • 触发什么事件:事件类型

    • 触发以后做什么:事件处理函数

    var oDiv = document.querySelector('div')
    ​
    oDiv.onclick = function () {}
    // 谁来触发事件 => oDiv => 这个事件的事件源就是 oDiv
    // 触发什么事件 => onclick => 这个事件类型就是 click
    // 触发之后做什么 => function () {} => 这个事件的处理函数
    • 我们想要在点击 div 以后做什么事情,就把我们要做的事情写在事件处理函数里面

    var oDiv = document.querySelector('div')
    ​
    oDiv.onclick = function () {console.log('你点击了 div')
    }
    • 当我们点击 div 的时候,就会执行事件处理函数内部的代码

    • 每点击一次,就会执行一次事件处理函数

DOM0级 事件

  1. 常用事件

    1. onblur : 失焦事件

    2. onfocus : 得焦事件

    3. onchange : 内容改变事件

  2. 鼠标常用事件

    1. onclick : 点击事件

    2. ondblclick : 双击事件

    3. onmousedown : 鼠标按下事件

    4. onmouseup : 鼠标抬起事件

    5. onmouseenter : 鼠标移入事件

    6. onmouseleave : 鼠标移出事件

    7. onmouseover : 鼠标移入事件

    8. onmouseout : 鼠标移出事件

    9. onmousemove : 鼠标移动事件

  3. 键盘常用事件

    1. onkeydown : 键盘按下

    2. onkeyup : 键盘抬起

    3. onkeypress : 键盘按过(按下时触发)

  4. 其它事件

    1. onload : 加载成功事件

    2. error : 加载失败事件

    3. resize : 大小改变事件

  <script>        
//1. 获取元素对象var txt = document.querySelector('input');var box = document.querySelector('#box');//2. 添加事件txt.onfocus = function(){this.value = ''; //清空当前文本框}txt.onblur = function(){alert('失焦后:' + this.value);}txt.onblur = null;txt.onchange = function(){alert('改变后:' + this.value);}txt.oninput = function(){box.innerText = this.value;}box.onclick = function(){console.log('点击了div');}box.ondblclick = function(){console.log('双击了div')}box.onmousedown = function(){console.log('鼠标在div上按下');}box.onmouseup = function(){console.log('鼠标在div上抬起');}box.onmouseover = function(){console.log('over:','鼠标移入了div中');}box.onmouseout = function(){console.log('out:' + '鼠标移出了div');}box.onmouseenter = function(){console.log('enter:' + '鼠标移入了div');}box.onmouseleave = function(){console.log('leave:鼠标移出了div');}box.onmousemove = function(){console.log('鼠标在div上移动');}document.onkeydown = function(){console.log('按下键盘');}document.onkeyup = function(){console.log('抬起键盘')}document.onkeypress = function(){console.log('按过键盘');}</script>

DOM0级事件绑定

ele.onclick = function(){}

DOM2级 事件绑定

标准 浏览器: ele.addEventListener('click',function(){},false)

IE 浏览器 :ele.attachEvent('onclick',function(){})

  <script>//1. 获取元素var box = document.querySelector('#box');function fn1(){alert('开灯');}function fn2(){alert('开空调');}function fn3(){alert('开热水器');}2. 绑定事件box.onclick = fn1;box.onclick = fn2;box.onclick = fn3;标准浏览器添加事件监听器1. 第一个参数:事件类型2. 第二个参数:事件处理程序3. 第三个参数:是否进行捕获  false(默认) : 冒泡    true(捕获)box.addEventListener('click',fn1,false);box.addEventListener('click',fn2,false);box.addEventListener('click',fn3,false);IE浏览器添加事件监听器1. 第一个参数:事件驱动2. 第二个参数:事件处理程序box.attachEvent('onclick',fn1);box.attachEvent('onclick',fn2);box.attachEvent('onclick',fn3);兼容function addEventListener(dom,type,fn,bool){//1. 处理默认参数的问题bool = bool || false;//2. 是否支持addEventListener方法if(dom.addEventListener){dom.addEventListener(type,fn,bool);}else if(dom.attachEvent){dom.attachEvent('on' + type,fn);}}addEventListener(box,'click',fn1);addEventListener(box,'click',fn2);addEventListener(box,'click',fn3);//标准浏览器移除事件监听器// box.removeEventListener('click',fn2,false);//IE浏览器移除事件监听器// box.detachEvent('onclick',fn2);function removeEventListener(dom,type,fn,bool){//1. 处理默认参数的问题bool = bool || false;//2. 是否支持addEventListener方法if(dom.removeEventListener){dom.removeEventListener(type,fn,bool);}else if(dom.detachEvent){dom.detachEvent('on' + type,fn);}}removeEventListener(box,'click',fn2);</script>
//添加事件监听器
//标准浏览器
//第一个参数:事件类型 (名词)
//第二个参数:事件处理程序
//第三个参数:是否进行事件捕获? false(冒泡-默认值) true(捕获)
// o_btn.addEventListener('click',fn1,false);
// o_btn.addEventListener('click',fn2,false);
// o_btn.addEventListener('click',fn3,false);
//IE浏览器
第一个参数:事件驱动
第二个参数:事件处理程序
​
// o_btn.attachEvent('onclick',fn1);
// o_btn.attachEvent('onclick',fn2);
// o_btn.attachEvent('onclick',fn3);
//兼容
function addEventListener(obj,type,fn,bool){//初始化bool参数bool = bool || false;if(obj.addEventListener){obj.addEventListener(type,fn,bool);}else if(obj.attachEvent){obj.attachEvent('on' + type,fn);}
}

事件解绑方式

DOM0级事件解绑

ele.onclick = null;

DOM2级事件解绑

标准 浏览器: ele.removeEventListener('click',function(){},false)

IE 浏览器 :ele.detachEvent('onclick',function(){})

//移除事件监听
//标准浏览器
// o_btn.removeEventListener('click',fn2,false);
//IE浏览器
// o_btn.detachEvent('onclick',fn2);
//兼容
function removeEventListener(obj,type,fn,bool){//初始化bool参数bool = bool || false;if(obj.removeEventListener){obj.removeEventListener(type,fn,bool);}else if(obj.detachEvent){obj.detachEvent('on' + type,fn);}
}

事件对象的认识

什么是事件对象?(类似于飞机上的黑匣子、汽车上的行车记录仪、教室中的摄像头)

当绑定事件的对象,在触发事件时,所发生的事情记录在一个地方,而这个地方称为事件对象。

如何获取事件对象?

  1. 标准浏览器获取事件对象的方式: 触发事件后,会自动给事件处理程序传递一个参数,这个参数就是事件对象。

  2. IE浏览器获取事件对象的方式: window.event

  3. 兼容:

  4. arguments : 内置的对象,是一个伪数组,是实参副本.

    function getEvent(){return arguments[0] || window.event;
    }

事件对象内鼠标相关信息

鼠标的相对坐标值:(鼠标相对于所在对象上的坐标值)

  1. event.offsetX / event.offsetY

鼠标的可视区坐标值:(当前鼠标触发点距离当前窗口左上角的X/Y坐标)

  1. event.clientX / event.clientY

鼠标的绝对坐标值:(当前鼠标触发点距离BODY左上角的X/Y坐标(IE9以下没有这两个属性)

//兼容处理:
event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)
event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)

事件对象内键盘相关信息

  1. onkeydown/onkeyup : event.keyCode

监听整个键盘,其中字母键只返回大写的编码值。

  1. onkeypress : event.keyCode || event.charCode || event.which

监听编辑键区,字母键返回大小的编码值。 低版本浏览器中有可能监听功能键区、回车键出现过10 兼容:

//7. 获取键盘编码值的兼容
function getKeyCode(evt){var e = evt || window.event;return e.keyCode || e.charCode || e.which;
}

altKey / shiftKey / ctrlKey / metakey

  1. event.metaKey : 返回一个布尔值标识meta键(windows键)是否被按键并被保持。

返回true表示meta键按下并保持

返回false表示没有满足meta键按下并保持的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/210260.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF下的宣告默认路由方法

作者简介&#xff1a;大家好&#xff0c;我是Asshebaby&#xff0c;热爱网工&#xff0c;有网络方面不懂的可以加我一起探讨 :1125069544 个人主页&#xff1a;Asshebaby博客 当前专栏&#xff1a; 网络HCIP内容 特色专栏&#xff1a; 常见的项目配置 本文内容&am…

【OpenGL】窗口的创建

从今天开始我们开始学习OpenGL&#xff0c;从0开始&#xff0c;当然是有C基础的前提 首先包含glad和GLFW的头文件 #include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> 初始化 GLFW 在 main 函数中&#xff0c;我们首先使用 glfwInit 初…

数学建模-基于集成学习的共享单车异常检测的研究

基于集成学习的共享单车异常检测的研究 整体求解过程概述(摘要) 近年来&#xff0c;共享单车的快速发展在方便了人们出行的同时&#xff0c;也对城市交通产生了一定的负面影响&#xff0c;其主要原因为单车资源配置的不合理。本文通过建立单车租赁数量的预测模型和异常检测模型…

深入理解URL、URI和URN在Web开发中的重要性

引言&#xff1a; 在Web开发中&#xff0c;我们经常听到URL、URI和URN这几个术语&#xff0c;它们是构建和理解互联网资源的基础。虽然它们看起来相似&#xff0c;但实际上代表着不同的概念。本文将深入研究URL、URI和URN的定义、用途以及在Web开发中的重要性。 一、什么是URI&…

成为AI产品经理——模型稳定性评估(PSI)

一、PSI作用 稳定性是指模型性能的稳定程度。 上线前需要进行模型的稳定性评估&#xff0c;是否达到上线标准。 上线后需要进行模型的稳定性的观测&#xff0c;判断模型是否需要迭代。 稳定度指标(population stability index ,PSI)。通过PSI指标&#xff0c;我们可以获得不…

了解 ignore_above 参数对 Elasticsearch 中磁盘使用的影响

在 Elasticsearch 中&#xff0c;ignore_above 参数允许你忽略&#xff08;而不是索引&#xff09;长于指定长度的字符串。 这对于限制字段的大小以避免性能问题很有用。 在本文中&#xff0c;我们将探讨 “ignore_above” 参数如何影响 Elasticsearch 中字段的大小&#xff0c…

使用git出现的问题

保证 首先保证自己的git已经下载 其次保证自己的gitee账号已经安装并且已经生成ssh公钥 保证自己要push的代码在要上传的文件夹内并且配置文件等都在父文件夹&#xff08;也就是文件没有套着文件&#xff09; 问题 1 $ git push origin master gitgitee.com: Permission de…

2023.11.27 关于 Mybatis 增删改操作

目录 引言 增加用户操作 删除用户操作 修改用户操作 阅读下述文章之间 建议点击下方链接先了解 MyBatis 的创建与使用 MyBatis 的创建与使用 建议点击下方链接先了解 单元测试 的创建与使用 Spring Boot 单元测试的创建与使用 引言 为了方便下文实现增、删、改操作我们先…

Hdoop学习笔记(HDP)-Part.19 安装Kafka

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

MySQL笔记-第04章_运算符

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第04章_运算符1. 算术运算符2. 比较运算符3. 逻辑运算符4. 位运算符5. 运算符的优先级拓展&#xff1a;使用正则表达式查询 第04章_运算符 …

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(3)》(19)

《Linux操作系统原理分析之linux存储管理&#xff08;3&#xff09;》&#xff08;19&#xff09; 6 Linux存储管理6.4 Linux 的分段和分页结构6.4.1Linux 的分段结构6.4.2 Linux 的三级分页结构6.4.3 内核页表和进程页表 6 Linux存储管理 6.4 Linux 的分段和分页结构 本节主…

广州数字孪生赋能工业制造,加速推进制造业数字化转型

广州数字孪生赋能工业制造&#xff0c;加速推进制造业数字化转型。数字孪生系统基于历史数据、实时数据&#xff0c;采用人工智能、大数据分析等新一代信息技术对物理实体的组成、特征、功能和性能进行数字化定义和建模。通过构建在信息世界对物理实体的等价映射&#xff0c;对…

【上海大学数字逻辑实验报告】四、组合电路(三)

一、 实验目的 掌握多路选择器74LS151的原理。掌握译码器74LS138的原理。学会在Quartus II上使用多路选择74LS151设计电路。学会在Quartus II上使用译码器74LS138设计电路。 二、 实验原理 多路选择器又称数据选择器或多路开关&#xff0c;它是一种多路输入单路输出的组合逻…

Vue中 实现自定义指令(directive)及应用场景

一、Vue2 1. 指令钩子函数 一个指令定义对象可以提供如下几个钩子函数 (均为可选)&#xff1a; bind 只调用一次&#xff0c;指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。inserted 被绑定元素插入父节点时调用 (仅保证父节点存在&#xff0c;但不一定已…

分享70个节日PPT,总有一款适合您

分享70个节日PPT&#xff0c;总有一款适合您 70个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1IRIKuFoGjQJ14OVkeW_mDQ?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

使用Python Flask搭建Web问答应用程序并发布到公网远程访问

使用Python Flask搭建web问答应用程序框架&#xff0c;并发布到公网上访问 文章目录 使用Python Flask搭建web问答应用程序框架&#xff0c;并发布到公网上访问前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程…

无人机覆盖路径规划综述

摘要&#xff1a;覆盖路径规划包括找到覆盖某个目标区域的每个点的路线。近年来&#xff0c;无人机已被应用于涉及地形覆盖的多个应用领域&#xff0c;如监视、智能农业、摄影测量、灾害管理、民事安全和野火跟踪等。本文旨在探索和分析文献中与覆盖路径规划问题中使用的不同方…

Linux--网络编程-ftp(TCP)网络通信-文件交互

项目要求&#xff1a;实现以下内容 远程控制&#xff1a; 1、查看服务器当前路径文件 ls 3、进入、退出服务器文件夹 cd 4、上传文件到服务器 put xxx 本地控制&#xff1a; 1、查看本地&#xff08;客户端&#xff09;文件 lls 2、进入客户端文件夹 lcd 3、获取服务器的文件…

智能联动第三方告警中心,完美实现故障响应全闭环

前言 我们曾讨论完善的告警策略是整个数据监控系统的重要组成部分&#xff08;参见《机智的告警策略&#xff0c;完善监控系统的重要一环》&#xff09;&#xff0c;介绍了如何配置告警通知以及场景示例&#xff0c;帮助用户及时更多潜在的故障和问题&#xff0c;有效地保障系…

Word 在页眉或页脚中设置背景颜色

目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 如何在word的页眉页脚中设置背景色&#xff1f; 二、解决方案 打开 Word 文档并进入页眉或页脚视图。在 Word 2016 及更高版本中&#xff0c;你可以通过在“插入”选项卡中单击“页眉”或“页脚”按钮来进入或者…