当前位置: 首页 > article >正文

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);

http://www.kler.cn/a/461553.html

相关文章:

  • ESP32-S3遇见OpenAI:OpenAI官方发布ESP32嵌入式实时RTC SDK
  • NLP 中文拼写检测纠正论文-07-NLPTEA-2020中文语法错误诊断共享任务概述
  • Java高频面试之SE-08
  • Linux实验报告14-Linux内存管理实验
  • 算法-判断4的次幂
  • 大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!
  • 汇川Easy系列正弦信号发生器(ST源代码)
  • Swift Combine 学习(五):Backpressure和 Scheduler
  • 【OpenGL ES】GLSL基础语法
  • AAAI 2025论文分享┆一种接近全监督的无训练文档信息抽取方法:SAIL(文中附代码链接)
  • 【蓝桥杯——物联网设计与开发】基础模块9 - PWM
  • Android Notification 问题:Invalid notification (no valid small icon)
  • 读书网(文章内容的抓取)
  • 【Redis知识】Redis进阶-redis还有哪些高级特性?
  • private static final Logger log = LoggerFactory.getLogger()和@Slf4j的区别
  • wpf 基于Behavior库 的行为模块
  • 网络安全 | 物联网安全:从设备到网络的全方位防护
  • day 29 进程exec函数族 ,进程实现无人机模块,exec实现minishell
  • Ribbon和Eureka的集成
  • 黑神话悟空游戏鼠标光标使用教程与下载
  • 探秘Kafka源码:关键内容解析
  • 【Leetcode 热题 100】22. 括号生成
  • 设计模式-创建型模式-工厂模式
  • 【Git_bugs】remote error GH013 Repository rule violations found for.md
  • 【网络】什么是路由协议(Routing Protocols)?常见的路由协议包括RIP、OSPF、EIGRP和BGP
  • ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)