〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性

  • 说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
  • 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
  • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者

  • 🏆 白宝书系列
    • 🏅 启示录 - 攻城狮的自我修养
    • 🏅 Python全栈白宝书
    • 🏅 ChatGPT实践指南白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书


文章目录

  • ⭐ 事件对象
    • 🌟 事件对象中的鼠标的属性
    • 🌟 事件对象中的键盘属性

⭐ 事件对象

事件对象: 事件处理函数提供一个形式参数,它是一个对象,封装了本次事件的细节,这个参数通常用单词event或字母e来表示

示例代码:

oBox.onmousemove = function (e) {
    //对象e就是这次事件的“事件对象”
}

事件对象中有很多的强大的属性和方法,我们可以直接拿来使用。接下来,接下来我们来看一些常用的属性和方法:

🌟 事件对象中的鼠标的属性

鼠标位置属性就是在鼠标事件中,描述鼠标位置的一些属性

属性属性描述
clientX鼠标指针相对于浏览器的水平坐标
clientY鼠标指针相对于浏览器的垂直坐标
pageX鼠标指针相对于整张网页的水平坐标
pageY鼠标指针相对于整张网页的垂直坐标
offsetX鼠标指针相对于事件源元素的水平坐标
offsetY鼠标指针相对于事件源元素的垂直坐标

我们用一张图来解释这些属性具体指的是什么(因为浏览器框可能不能完全展示整个网页,需要用右侧的滚动条滚动才能看见,下图种用虚线框代表整个网页):

image-20230420141650889

使用这些属性的示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        #box {
            width: 200px;
            height: 200px;
            background-color: #ccc;
            margin: 100px;
        }
        body {
            height: 2000px;
        }
        #info {
            font-size: 20px;
            margin-left: 100px;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <div id="info"></div>
    <script>
        var oBox = document.getElementById('box');
        var oInfo = document.getElementById('info');

        oBox.onmousemove = function (e) {
            oInfo.innerHTML = 'offsetX/Y:   ' + e.offsetX + ',' + e.offsetY + '<br>' 
                             + 'clientX/Y:   ' + e.clientX + ',' + e.clientY + '<br>'
                             + 'pageX/Y:   ' + e.pageX + ',' + e.pageY;
        };
    </script>
</body>
</html>

image-20230420161900202

上述代码中,如果页面为往下滚动,那么clientX/Y和pageX/Y的值会是一模一样的,很好理解,因为网页正处于最上方,和浏览器的坐标系是重叠的。当页面往下滚动后,两者才会出现差异。

需要注意的是,DOM中规定:offsetX和offsetY是鼠标所在之处的最内部盒子的坐标,比如下面的代码中,虽然我们设置的是大盒子的事件监听,但当鼠标放到小盒子中时,offsetX和offsetY显示是以小盒子为基准的坐标:image-20230420162152804

事件对象中鼠标滚轮事件onmousewheel也有属性——deltaY,表示鼠标滚轮滚动方向,向下滚动时返回正值,向上滚动时返回负值

示例代码:

<body>
    <div id="box"></div>
    <script>
        document.onmousewheel = function (e) {
            console.log(e.deltaY);
        }
    </script>
</body>

在这里插入图片描述


🌟 事件对象中的键盘属性

e.charCode属性 通常用于onkeypress事件中,表示用户输入字符的字符码

e.keyCode属性 通常用于onkeydown事件和onkeyup事件中,表示用户按下的按键的“键码”(键盘上每一个按键都会对应一个键码)

关于字符按键和字符码的对应关系如下:

字符对应的字符码(charCode)
数字0~948~57
大写字母A~Z65~90
小写字母a~z97~122

关于按键和键码的对应关系如下:

按键对应的键码(keyCode)
数字0~948~57(同charCode)
字母不分大小写a~z65~90
四个方向键⬅⬆➡⬇37、38、39、40
回车键13
空格键32

使用这些属性的示例代码:

<body>
    <input type="text" id="field1">
    <div id="info1"></div>
    <input type="text" id="field2">
    <div id="info2"></div>

    <script>
        var oField1 = document.getElementById('field1');
        var oInfo1 = document.getElementById('info1');
        var oField2 = document.getElementById('field2');
        var oInfo2 = document.getElementById('info2');

        oField1.onkeypress = function (e) {
            oInfo1.innerText = '您按键的对应的字符码是:' + e.charCode;
        };
        oField2.onkeydown = function (e) {
            oInfo2.innerText = '您按键的对应的键码是:' + e.keyCode;
        };
    </script>
</body>

image-20230420193534953

学到这里,我们可能还是不知道这个字符码和键码在实际工作中有什么用,接下来就来写一个有意思的小案例来实际应用一下这两个属性。

案例: 制作一个特效,按方向键可以控制页面上的盒子按对应的方向移动

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #box {
            width: 100px;
            height: 100px;
            background-color: orange;
            position: absolute;
            top: 200px;
            left: 200px;
        }
    </style>
</head>

<body>
    <div id="box"></div>
    <script>
        var oBox = document.getElementById('box');

        //定义两个全局变量,分别表示盒子top属性和left属性
        var t = 200;
        var l = 200;

        //document对象的键盘按下事件监听,即对用户在整个网页上按下按键时进行事件监听
        document.onkeydown = function (e) {
            switch (e.keyCode) {
                case 37:
                    l -= 3;
                    break;
                case 38:
                    t -= 3;
                    break;
                case 39:
                    l += 3;
                    break;
                case 40:
                    t += 3;
                    break;
            }
            //更改样式
            oBox.style.top = t + 'px';
            oBox.style.left = l + 'px';
        };
    </script>
</body>
</html>

image-20230420201100806

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub6

靶机地址&#xff1a;https://download.vulnhub.com/evilbox/EvilBox---One.ova 准备工作 可以先安装 kali 的字典: sudo apt install seclists ​ 或者直接输入 seclists​&#xff0c;系统会问你是否安装&#xff0c;输入 y 即可自动安装 733 x 3751414 x 723 ​ 默认路…

opencv 常用操作指南

1.通道交换 读取图像&#xff0c;然后将RGB通道替换成BGR通道&#xff0c;需要注意的是&#xff0c;opencv读取的图像默认是BGR。cv2.cvtColor函数可以参考Color Space Conversions img cv2.imread(imori.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2.imwrite(answe…

HarmonyOS(五)—— 认识页面和自定义组件生命周期

前言 在前面我们通过如何创建自定义组件一文知道了如何如何自定义组件以及自定义组件的相关注意事项&#xff0c;接下来我们认识一下页面和自定义组件生命周期。 自定义组件和页面的关系 在开始之前&#xff0c;我们先明确自定义组件和页面的关系 自定义组件&#xff1a;Co…

聚观早报 |一加12正式开启预订;OPPO Reno11系列卖点

【聚观365】11月24日消息 一加12正式开启预订 OPPO Reno11系列卖点 小鹏第三季度营收财报 Claude 2.1 聊天机器人公布 现代汽车将与伦敦大学学院合作 一加12正式开启预订 全新的一加12系列公开亮相已有一段时间&#xff0c;不久前一加官方宣布&#xff0c;该机将于12月4日…

(1)(1.19) TeraRanger One/EVO测距仪

文章目录 前言 1 通过I2C与TeraRanger EVO连接 2 Mission Planner中的设置 3 测试传感器 4 参数说明 前言 TeraBee EVO 系列测距仪是基于红外飞行时间 (TOF) 技术的轻型距离测量传感器。与基于激光的激光雷达相比&#xff0c;它们的速度比超声波快得多&#xff0c;体积更…

Microsoft Office 2019下载工具

今天博主继续推出重磅福利——Microsoft Office合集的安装工具。 Microsoft Office是一套由微软公司开发的办公软件&#xff0c;它为 Microsoft Windows 和 Mac OS X而开发。与办公室应用程序一样&#xff0c;它包括联合的服务器和基于互联网的服务。最近版本的 Office 被称为 …

Linux实验三:shell程序设计: shell基础

实验目的: 进一步巩固shell程序设计语言基本语法&#xff0c;加深对所学知识理解。 实验要求 1. 四种变量的使用 2. 配置环境变量 3. 元字符和正则表达式 4. 引号 1. 本地变量 $ var1"hello Linux" //定义本地变量var1 $ read var2 //定义本地变量vae…

React基础入门

文章目录 创建项目组件和事件更新状态导出组件jsx react是目前最流行的前端框架&#xff0c;几乎也不同太介绍了。 创建项目 首先下载node.js&#xff0c;安装成功后&#xff0c;最好换成国内的源 npm config set registry https://registry.npm.taobao.org然后就可以使用脚…

Ubuntu20.04清理垃圾vscode缓存

使用VM虚拟机安装了Ubuntu系统&#xff0c;主目录空间越来越小&#xff0c;硬盘扩容之后很快又空间不足&#xff0c;甚至出现了开机卡黑屏的情况&#xff0c;这里记录一下解决过程。 1 重新开机进入系统 状态&#xff1a;卡到了开机黑屏状态&#xff0c;左上角有一条小横杠 原…

Charles 网络抓包工具详解与实战指南

文章目录 导读软件版本Charles基本原理核心功能下载及安装界面介绍网络包展示 常用场景介绍PC 端网络抓包移动端网络抓包PC 端配置手机端配置 开启 SSL 代理PC 端和移动端 CA 证书安装Charles 直接安装Charles 下载 CA 文件手动安装 常用操作请求重发请求改写、动态改写断点&am…

常用服务注册中心与发现(Eurake、zookeeper、Nacos)笔记(一)基础概念

基础概念 注册中心 在服务治理框架中&#xff0c;通常都会构建一个注册中心&#xff0c;每个服务单元向注册中心登记自己提供的服务&#xff0c;将主机与端口号、版本号、通信协议等一些附加信息告知注册中心&#xff0c;注册中心按照服务名分类组织服务清单&#xff0c;服务…

【100个Cocos实例】东皇太一的技能环绕效果

引言 Cocos中物体围绕物体做圆周运动。 不管是2D还是3D游戏&#xff0c;旋转是游戏中常见的操作之一&#xff0c;它可以用来改变游戏对象的方向、角度或者位置&#xff0c;从而创造出更加生动和有趣的游戏体验。 本文将介绍一下如何实现王者荣耀中东皇太一的技能环绕效果。 …

五分钟,Docker安装flink,并使用flinksql消费kafka数据

1、拉取flink镜像&#xff0c;创建网络 docker pull flink docker network create flink-network2、创建 jobmanager # 创建 JobManager docker run \-itd \--namejobmanager \--publish 8081:8081 \--network flink-network \--env FLINK_PROPERTIES"jobmanager.rpc.ad…

123. 股票买卖的最佳时机III(2次交易)

题目 题解 class Solution:def maxProfit(self, prices: List[int]) -> int:N len(prices)# 状态定义 dp[i][j][k]代表在第i天&#xff0c;被允许完成j次交易时&#xff0c;持有或者不持有的最大利润。k0代表不持有&#xff0c;k1代表持有dp [[[0 for k in range(2)] for…

朋友圈被折叠怎么解决?

最近有客户咨询发的朋友圈老被折叠怎么办&#xff0c;正常发都被折叠。一些朋友在微信做私域的&#xff0c;在朋友圈日常营销是必不可少的&#xff0c;如何避免这种问题和怎么解决呢&#xff1f; 为什么会被折叠&#xff1f; 1.据了解&#xff0c;朋友圈内容折叠功能是主要针对…

【JavaScript】3.1 项目实践:制作一个简单的网页应用

文章目录 项目需求HTML结构JavaScript逻辑添加待办事项标记待办事项删除待办事项保存待办事项 总结 在此章节中&#xff0c;我们将学习如何使用JavaScript创建一个简单的网页应用。这将是一个待办事项列表应用&#xff0c;用户可以添加新的待办事项&#xff0c;标记已完成的事项…

【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比

文章目录 前言什么是UUID?什么是雪花ID?什么是MySql自增ID?优缺点对比UUID:优点1.全球唯一性2.无需数据库支持 缺点1.存储空间大2.索引效率低3.查询效率低 雪花ID&#xff1a;优点1.分布式环境下唯一性 缺点1.依赖于机器时钟2.存储空间较大3.查询效率低 MYSQL自增:优点1.简单…

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 小程序商城免费搭建

使用技术&#xff1a; Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台&#xff1a; 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务&#xff08;30个通用微服务如&#xff1a;商品、订单、购物车、个人中心、支…

c#数据库:vs2022 加入mysql数据源

网上有VS2019连接MySQL数据库的&#xff0c;那么VS2022&#xff0c;VS2023如果和连接到mysql数据库呢&#xff0c;这里总结一下我的经历&#xff1a; 1、首先下载ODBC驱动安装包 当前下载地址&#xff1a;https://dev.mysql.com/downloads/connector/odbc/ 2、ODBC安装 下载完…

qgis添加wms服务

例如添加geoserver的wms服务 左右浏览器-WMS/WMTS-右键-新建连接 URL添加geoserver的wms地址 http://{ip}:{port}/geoserver/{workspace}/wms 展开wms目录&#xff0c;双击相应图层即可打开