JS中的鼠标事件和键盘事件基础

文章目录

  • 一、鼠标事件
  • 二、键盘事件

鼠标事件和键盘事件在一些自定义组件时会得到使用,其实触发频率很高,但是往往被忽略

一、鼠标事件

// 鼠标事件 click => 单击; dblclick => 双击; mousedown => 鼠标按下; mousemove => 鼠标移动
const clickHandler = (event) => {
  // 鼠标事件对象
  const eventObj = {
    type: event.type, // 事件类型
    target: event.target, // 事件目标, 点击的元素,一般是深层元素,再冒泡外传
    // 鼠标相对于元素的位置,最近的一个定位祖先元素;如position: "relative"
    offsetX: event.offsetX, 
    offsetY: event.offsetY,
    clientX: event.clientX, // 鼠标相对于浏览器窗口的位置,根页面
    clientY: event.clientY,
    screenX: event.screenX, // 鼠标相对于屏幕的位置(可以把浏览器缩小测试)
    screenY: event.screenY,
    x: event.x, // x 等同于 clientX
    y: event.y
  };
  console.log("click", event);
};
const mousemoveHandler = () => {
  console.log("mousemove");
};
const mousedownHandler = () => {
  console.log("mousedown");
};
// 双击事件 注意点击一定会触发,条件合适的同时才会触发双击,而且双击事件会在单击事件之后触发
const dblclickHandler = () => {
  console.log("dblclick");
};
window.addEventListener("click", clickHandler);
window.addEventListener("dblclick", dblclickHandler);
window.addEventListener("mousedown", mousedownHandler);
window.addEventListener("mousemove", mousemoveHandler);

// 注意页面销毁时清除监听器;注意销毁的时候传入同一个函数(函数是有内存地址的,相当于变量)
// window.removeEventListener("click", clickHandler);

二、键盘事件

// eventObj 键盘事件对象
const KeyboardEventObj = {
  ctrlKey: true, // 是否按下了 ctrl 键
  altKey: true, // 是否按下了 alt 键
  shiftKey: true, // 是否按下了 shift 键
  metaKey: true, // 是否按下了 meta 键
  keyCode: 65, // 按下的键的编码, 数字
  code: "KeyA", // 按下的键的字符的名字,内部定义的
  key: "a", // 区分大小写,实际输出到字符
  repeat: false, // 是否重复按下, keypress中会持续触发
  bubbles: true // 是否冒泡,冒泡导致的事件
};

// 键盘事件 keydown => 按下键盘; keypress => 按下键盘,keyup => 松开键盘
const keydownHandler = (e) => {
  // key 键盘按键的字符,code 键盘按键的编码
  console.log(e.key, e);
};
// 鼠标按住,会不断触发
const keypressHandler = (e) => {
  console.log(e.key, e);
};
const keyupHandler = (e) => {
  console.log(e.key, e);
};
window.addEventListener("keydown", keydownHandler);
window.addEventListener("keypress", keypressHandler);
window.addEventListener("keyup", keyupHandler);

// 注意页面销毁时清除监听器
// window.removeEventListener("keydown", keydownHandler);

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

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

相关文章

【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型

1. 背景介绍 虽然现在大模型微调的文章很多,但纸上得来终觉浅,大模型微调的体感还是需要自己亲自上手实操过,才能有一些自己的感悟和直觉。这次我们选择使用llama_factory来微调chatglm-4-9B大模型。 之前微调我们是用两块3090GPU显卡&…

微信流量主挑战:三天25用户!功能未完善?(新纪元4)

🎉【小程序上线第三天!突破25用户大关!】🎉 嘿,大家好!今天是我们小程序上线的第三天,我们的用户量已经突破了25个!昨天还是16个,今天一觉醒来竟然有25个!这涨…

【工具变量】国际消费中心城市DID数据(2007年-2023年)

数据简介 国际消费中心城市的定位是一个国家乃至全球消费市场消费资源的集中地和关键枢纽,该城市特质不单顺应我国对外交流与开放的不断扩大的趋势,其培育和建设国际消费中心城市的一大意义在于,以地区地域资源中心定位,来推动周围…

如何修复 WordPress 中的“Error establishing a database connection”问题

如何修复 WordPress 中的“Error establishing a database connection”问题 在使用 WordPress 建站时,如果你看到“Error establishing a database connection”的提示,不要慌张。这通常意味着网站无法连接到数据库,因此无法显示内容。下面…

streamlit、shiny、gradio、fastapi四个web APP平台体验

streamlit、shiny、gradio、fastapi四个web APP平台体验 经常被问的问题就是:web APP平台哪个好?该用哪个?刚开始只有用streamlit和shiny,最近体验了一下gradio和fastapi,今天根据自己的体会尝试着回答一下。 使用R语…

http报头解析

http报文 http报文主要有两类是常见的,第一类是请求报文,第二类是响应报文,每个报头除了第一行,都是采用键值对进行传输数据,请求报文的第一行主要包括http方法(GET,PUT, POST&#…

Qwen-Agent

文章目录 一、关于 Qwen-Agent更新准备:模型服务免责声明 二、安装三、快速开发步骤 1:添加自定义工具步骤 2:配置 LLM步骤 3:创建智能体步骤 4:运行智能体 四、FAQ1、支持函数调用(也称为工具调用&#xf…

flux文生图模型实践

flux文生图模型实践 flyfish https://github.com/black-forest-labs/flux Black Forest Labs发布FLUX.1 Tools,这是一套模型全家桶,旨在为FLUX.1基础文本转图像模型添加控制和可操纵性,从而实现对真实图像和生成图像的修改和重新创建。FLU…

【ETCD】【实操篇(十九)】ETCD基准测试实战

目录 1. 设定性能基准要求2. 使用基准测试工具基准测试命令 3. 测试不同的负载和场景4. 监控集群性能5. 评估硬件和网络的影响6. 对比性能基准7. 负载均衡和容错能力测试8. 优化与调优9. 测试在高负载下的表现总结 1. 设定性能基准要求 首先,明确集群性能的目标&am…

Docker Compose 构建 EMQX 集群 实现mqqt 和websocket

EMQX 集群化管理mqqt真香 目录 #目录 /usr/emqx 容器构建 vim docker-compose.yml version: 3services:emqx1:image: emqx:5.8.3container_name: emqx1environment:- "EMQX_NODE_NAMEemqxnode1.emqx.io"- "EMQX_CLUSTER__DISCOVERY_STRATEGYstatic"- …

【Cesium】三、实现开场动画效果

文章目录 实现效果实现方法实现代码组件化 实现效果 实现方法 Cesium官方提供了Camera的flyTo方法实现了飞向目的地的动画效果。 官方API:传送门 这里只需要用到目的地(destination)和持续时间(duration)这两个参数…

Qt从入门到入土(七)-实现炫酷的登录注册界面(下)

前言 Qt从入门到入土(六)-实现炫酷的登录注册界面(上)主要讲了如何使用QSS样式表进行登录注册的界面设计,本篇文章将介绍如何对登录注册界面进行整体控件的布局,界面的切换以及实现登录、记住密码等功能。…

智能化人才招聘系统是怎样的?

随着企业规模的扩大和业务范围的拓展,人才招聘成为了企业发展的关键环节。然而,市面上的人才招聘系统琳琅满目,质量参差不齐,许多企业发现,并非所有系统都能满足他们的需求,特别是智能化的需求。今天&#…

论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试

大语言模型拥有的强大能力可以用来辅助多种工作,但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz,它利用模型提示生成模糊测试驱动代码,并将代码片段嵌入到LLVM框架中执行模糊测试。 论文摘要 制作高质…

[最佳方法] 如何将视频从 Android 发送到 iPhone

概括 将大视频从 Android 发送到 iPhone 或将批量视频从 iPhone 传输到 Android 并不是一件容易的事情。也许您已经尝试了很多关于如何将视频从 Android 发送到 iPhone 15/14 的方法,但都没有效果。但现在,通过本文中的这 6 种强大方法,您可…

cesium小知识: 处理动画的5种方式

在 Cesium 中处理动画可以通过多种方式实现,具体取决于你想要创建的动画类型。Cesium 提供了丰富的API来支持不同种类的动画,包括但不限于物体的移动、旋转、缩放、属性变化等。以下是几种常见的动画处理方法: 1. 使用 Entity 和 SampledProperty 对于动态数据或随时间变化…

003:如何理解 CNN 中的 RGB 图像和通道?

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 在灰度图一节的最后,给出了一个由彩色图片转成灰度图的示例,并且通过 color_image.mode获取了图片的格式:彩色图片获取到的格式为 RGBA&a…

小程序基础 —— 07 创建小程序项目

创建小程序项目 打开微信开发者工具,左侧选择小程序,点击 号即可新建项目: 在弹出的新页面,填写项目信息(后端服务选择不使用云服务,开发模式为小程序,模板选择为不使用模板)&…

TP 钱包插件版本的使用

目前 TokenPocket 的几个平台中,以 ios 和 安卓版本最为常见,其实很少有人知道,浏览器上有一个插件版本的 Tp, 用电脑多的话,这也是一个挺好的选择。 最新版本现在支持Chrome、Brave 浏览器、Edge(Firefox及Opera正在…

【AIGC】使用Java实现Azure语音服务批量转录功能:完整指南

文章目录 引言技术背景环境准备详细实现1. 基础架构设计2. 实现文件上传功能3. 提交转录任务crul4. 获取转录结果 使用示例结果示例最佳实践与注意事项总结 引言 在当今数字化时代,将音频内容转换为文本的需求越来越普遍。无论是会议记录、视频字幕生成&#xff0c…