day13JS-MoseEvent事件

news2024/11/25 7:08:51

1. MouseEvent的类别

  1. mousedown :按下键
  2. mouseup :释放键
  3. click :左键单击
  4. dblclick :左键双击
  5. contextmenu :右键菜单
  6. mousemove :鼠标移动
  7. mouseover  : 鼠标经过 。 可以做事件委托,子元素可以冒泡给父元素 ,让父元素侦听了mouseover,子元素也是可以触发的。
  8. mouseout  :鼠标滑开 。可以做事件委托,子元素可以冒泡给父元素 ,让父元素侦听了mouseout,子元素也是可以触发的。
  9. mouseenter :鼠标进入。
  10.  mouseleave :鼠标离开。

注意!!!

  • 执行顺序:mousedown —> mouseup —> click
  • 区别:mouseover和mouseout子元素也会触发,可以冒泡触发。
  • 区别:mouseenter和mouseleave是针对侦听的对象触发,阻止了冒泡。

使用案例:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .div1 {
            width: 100px;
            height: 100px;
            background-color: red;
            position: relative;
            left: 200px;
            top: 200px;
        }

        .div2 {
            width: 50px;
            height: 50px;
            background-color: orange;
            position: absolute;
            left: 25px;
            top: 25px;
        }
    </style>
</head>

<body>
    <div class="div1">
        <div class="div2">你好</div>
    </div>
    <script>

        var div1 = document.querySelector(".div1");
        div1.addEventListener('mousedown', mouseHandler);
        div1.addEventListener('mouseup', mouseHandler);
        div1.addEventListener('click', mouseHandler);
        div1.addEventListener("mousemove", mouseHandler);
        div1.addEventListener("dblclick", mouseHandler)
        div1.addEventListener("contextmenu", mouseHandler);
        div1.addEventListener("mouseover", mouseHandler);
        div1.addEventListener("mouseout", mouseHandler);
        div1.addEventListener("mouseenter", mouseHandler);
        div1.addEventListener("mouseleave", mouseHandler);


        function mouseHandler(e) {
            console.log(e.type);
            if (e.type === "mousedown") {
                // 当有文本时,使用阻止默认行为可以禁止选中文本
                e.preventDefault();
            } else if (e.type === "contextmenu") {
                e.preventDefault();
            }
        }
    </script>
</body>

</html>

2. MoseEvent鼠标事件的属性详解

2.1 第一组事件属性

当鼠标事件触发时,同时按下对应的键。

1. altKey 事件属性返回一个布尔值。指示在指定的事件发生时,Alt 键是否被按下并保持住了。

 altKey使用语法:event.altKey=true|false|1|0 

function isKeyPressed(event){
    if (event.altKey==1){
        alert(" ALT 键被按下!");
    }else{
        alert(" ALT 键没被按下!");
    }
}

2. ctrlKey 事件属性可返回一个布尔值,指示当事件发生时,Ctrl 键是否被按下并保持住。

ctrlKey使用语法:event.ctrlKey=true|false|1|0 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body onmousedown="isKeyPressed(event)">

<p>单击文档中的某个地方。一个警告框会告诉你你是否按下CTRL键。</p>
<script>
function isKeyPressed(event){
    if (event.ctrlKey==1){
        alert("CTRL键被按下!");
    }else{
        alert("CTRL键没被按下!");
    }
}
</script>
</body>
</html>

3. metaKey 事件属性可返回一个布尔值,指示当事件发生时,"meta" 键是否被按下并保持住。metaKey在MAC中是command键。

metaKey使用语法:event.metaKey

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body onmousedown="isKeyPressed(event)">

<p>单击文档中的某个地方。一个警告框会告诉你是否你按下meta关键。</p>
<script>
function isKeyPressed(event){
    if (event.metaKey==1){
        alert("meta键被按下!");
    }else{
        alert("meta键没被按下!");
    }
}
</script>
</body>
</html>

4. shiftKey 事件属性可返回一个布尔值,指示当事件发生时,"SHIFT" 键是否被按下并保持住。

shiftKey 使用语法:event.shiftKey=true|false|1|0 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>

</head>
<body onmousedown="isKeyPressed(event)">

<p>点击该段落,弹窗会提示是否按下 shift 键。</p>
<script>
function isKeyPressed(event){
    if (event.shiftKey==1){
        alert(" shift 键被按下!");
    }
    else{
        alert(" shift 键没被按下!");
    }
}
</script>
</body>
</html>

 2.2 第二组事件属性

当使用mousedownmouseup事件触发时,按下了哪个键

mousedown:当鼠标指针移动到元素上方,并按下鼠标按键(左、右键均可)时,会发生 mousedown事件。

mouseup:当在元素上松开鼠标按键(左、右键均可)时,会发生 mouseup事件。

1. button: 鼠标左键(参数为0时) ,鼠标中键(参数为1时) ,鼠标右键(参数为2时)。button 事件属性可返回一个整数,指示当事件被触发时哪个鼠标按键被点击。

2. buttons: 鼠标左键(参数为1时) ,鼠标中键(参数为3时) ,鼠标右键(参数为2时)。

3. which: 鼠标左键(参数为1时) ,鼠标中键(参数为2时) ,鼠标右键(参数32时)。

2.3 第三组事件属性

1. detail :用于滚轮滚动触发滚动距离。detail:1

2. relatedTarget :失焦聚焦时,上一次触发的元素。 relatedTarget:null

2.4 第四组事件属性

鼠标点击相对视口的坐标 ,位置是相对位置

1. clientX事件属性返回当事件被触发时鼠标指针相对于浏览器页面(或客户区)的水平坐标。客户区指的是当前窗口。

使用方法:event.clientX

2. clientY 事件属性返回当事件被触发时鼠标指针向对于浏览器页面(客户区)的垂直坐标。 客户区指的是当前窗口。

使用方法:event.clientY

下面的例子可显示出事件发生时鼠标指针的坐标:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
function show_coords(event){
    var x=event.clientX;
    var y=event.clientY;
    alert("X coords: " + x + ", Y coords: " + y);
}
</script>
</head>
<body>

<p onmousedown="show_coords(event)">请在文档中点击。</p>

</body>
</html>

x和y与上面的clientX和clientY作用一样。

2.5 第五组事件属性

鼠标点击相对页面左上角距离,位置是绝对位置

pageX :水平方向。

pageY :垂直方向。

2.6 第六组事件属性

 相对屏幕左上角距离。

screenX 事件属性可返回事件发生时鼠标指针相对于屏幕的水平坐标。

screenY 事件属性可返回事件发生时鼠标指针相对于屏幕的垂直坐标。

2.7 第七组事件属性

是mousemove事件相对上次移动位置的偏移值。

movementX :水平方向。

movementY :垂直方向。

2.8 第八组事件属性

1. 如果父子容器定位,都是相对e.target这个目标对象的左上角距离。

2. 如果子元素没有定位,layerX、layerY则向上查找定位的父元素,如果没有找到则相对html左上角定位,如果找到父元素定位了,则相对父元素左上角距离。

layerX:519

layerY:112

offsetX:520

offsetY:112

3. input标签和焦点事件

3.1 焦点事件

focus:聚焦事件。在元素获得焦点时触发。这个事件不会冒泡;所有浏览器都支持。

blur:失焦事件。元素失去焦点时触发。这个事件不会冒泡;所有浏览器都支持。

注意!!!

1. 不能事件委托,仅用于input、textArea、select、a、button。

2. blur、focus 不支持冒泡。

focusin :聚焦事件。在元素获得焦点时触发,与 HTML 事件 focus 等价,但它冒泡。

focusout :失焦事件。在元素失去焦点时触发。与 HTML 事件 blur 等价,冒泡。

注意!!!

1. 可以事件委托,可以用表单和表单元素。

2. focusin、focusout 支持冒泡

当焦点从页面的一个元素移动到另一个元素时,事件的触发顺序:

  • focusout 在失去焦点的元素上触发。
  • focusin 在获得焦点的元素上触发。
  • blur 在失去焦点的元素上触发。
  • focus 在获得焦点的元素上触发。

案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <a href="#">超链接</a>
    <form action="">
        <input type="text" name="user">
        <button type="submit">提交</button>
    </form>
    <script>

        let input=document.querySelector("input");
        input.addEventListener("focus",focusHandler);
        input.addEventListener("blur",focusHandler);

        function focusHandler(e){
            console.log(e);
        }

        let form=document.querySelector("form");
        form.addEventListener("focusin",focusHandler);
        form.addEventListener("focusout",focusHandler);

        function focusHandler(e){
            console.log(e);
        }

    </script>
</body>
</html>

3.2 input标签 (input事件)

 input 输入时触发事件,可以委托给父元素。 input可以当作一个事件使用

 input是事件时常用的事件属性:

  • data:每次输入到 input 中的文本内容。
  • inputType :输入的类型( "insertCompositionText")。
  • isComposing : 是否输入法输入。是的时候值为true。

案例:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <a href="#">超链接</a>
    <form action="">
        <input type="text" name="user">
        <button type="submit">提交</button>
    </form>
    <script>

        let id;
        let input = document.querySelector("input");
        input.addEventListener("input", inputHandler);

        function inputHandler(e) {
            if (id) return;
            id = setTimeout(() => {
                clearTimeout(id);
                id = undefined;
                console.log(input.value);
            }, 500)
        }

    </script>
</body>

</html>

4. 节流和防抖

        节流第一次进入执行程序,在一定时间内不能再次进入,等待时间过后可以再次进入,然后又不能进入。

         防抖第一次不能进入,间隔一定时间后可以进入,然后不能进入,间隔一定时间后再次可以进入。

setTimeout(() => { }, 500)

let id = setTimeout(function () {
      clearTimeout(id);
}, 500)

5. 拖拽案例

方法一:

6. 走路案例

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FUNCTION_ALV 下拉框的实现

下拉框可以用drdn_field或者使用DRDN_HNDL&#xff0c;这个文章主要是下拉框的基本使用&#xff0c;核心就是在fieldcat内表里面设置好下拉框的字段或者组的编号 文章目录 drdn_field使用DRDN_HNDL复制状态完整代码核心代码运行结果 drdn_field 使用DRDN_HNDL 复制状态 完整代码…

AcWing852.spfa判断负环

cnt数组表示&#xff1a;cnt【j】表示边j #include<iostream> #include<cstring> #include<algorithm> #include<queue> #define N 2010 #define M 10010 using namespace std; int n,m; int h[N],w[M],e[M],ne[M],idx; int dis[N],cnt[N]; bool st[N…

ps笔刷设置使用介绍

形状动态 建议开启&#xff0c;作用是笔刷会有粗细变换 传递 不透明度抖动 . 选择钢笔压力&#xff0c;作用就是压感&#xff0c;压力值&#xff0c;有粗细深浅轻重变化 调到这画的时候就不会特别浅 流量抖动 选择钢笔压力&#xff0c;开了就有虚边 方便画过渡。 一般画…

JavaWeb实战教程:如何一步步构建房产信息管理系统?MySQL助力数据管理

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

Unable to delete file: .....(路径) signing-config.json无法删除

运行了一个去年很久之前的项目,在打包的时候弹出这个错误,提示要删除这个json文件,尝试了很多次无法删除,最后想到可能是文件权限的问题 Execution failed for task :app:clean. > Unable to delete file: D:\xxxxxx\xxxxxx\app\build\intermediates\signing_config\debug\…

基于Python、Django的企业门户网站设计

一、框架设计 1.1 创建项目和应用 企业门户网站的结构如下图所示。 因此,在文件夹下创建hengDaProject项目。在该项目下添加homeApp、aboutApp、newsApp、productsApp、serviceApp、scienceApp、contactApp应用。该操作参见:https://blog.csdn.net/qq_42148307/article/det…

【归纳总结】常见排序算法及其实现:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序

思维导图&#xff1a; 目录 思维导图&#xff1a; 一、插入排序 1.直接插入排序&#xff1a; a:基本思想&#xff1a; b:基本步骤&#xff1a; c:复杂度分析 d:Java代码实现&#xff1a; 2.希尔排序&#xff08;缩小增量排序&#xff09; a:基本思想&#xff1a; c…

python_每天定时向数据库插入数据

每天的零点十分&#xff0c;定时向mysql数据库插入&#xff0c;昨天新增的文件和昨天下载文件的记录。第一次运行的时候&#xff0c;会全量同步昨天之前的数据。 import os import threading from datetime import datetime, timedelta import time import schedule from pymy…

仓颉编程语言亮相全国大学生计算机系统能力大赛

2024年8月18日-22日&#xff0c;由全国高等学校计算机教育研究会、系统能力培养研究专家组、系统能力培养研究项目发起高校主办&#xff0c;杭州电子科技大学承办的2024全国大学生计算机系统能力大赛编译系统设计赛&#xff08;华为毕昇杯&#xff09;及操作系统设计赛在杭电下…

企业防泄密首选!哪款公司防泄密软件更强?看这里,一文解惑!

早在2011年&#xff0c;前苹果员工Paul Devine泄露苹果公司的机密信息&#xff0c;涉及新产品的预测、计划蓝图、价格和产品特征&#xff0c;还为苹果公司的合作伙伴、供应商和代工厂商提供的关于苹果公司的数据&#xff0c;这使得这些供应商和代工厂商拥有了与苹果谈判的筹码&…

Wireless Communications - 模拟调制

AM/DSB/VSB/SSB的调制与解调 AM DSB SSB 滤波法 相移法 VSB 相干解调 线性调制的抗噪声分析 DSB SSB FM/PM 的调制与解调 NBFM WBFM 调频信号的产生和解调 模拟调制对比

SpringBootFFmpeg实现M3U8切片转码播放(本地)

文章目录 参考概述代码pom.xmlffmpegFFmpegUtilsMediaInfoTranscodeConfig application.ymlApplicationUploadControllerindex.html 测试 参考 springboot-ffmpeg-demo gitee代码 SpringBoot FFmpeg实现一个简单的M3U8切片转码系统 FFmpeg音视频核心技术精讲 - 百度网盘 概…

【STM32】红外遥控

红外遥控&#xff0c;掌握了就能装逼了&#xff0c;哈哈哈哈哈哈。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 1 器件特性 这里载波发射周期的发射与不发射时间实际上是因为载波是38kHz、占空为三分之一的方波&a…

符号译码_网络同步赛

哎……又是 If平推字符 #include <bits/stdc++.h> using namespace std; signed main(){char x;while(cin>>x){if(x==1){cin>>x;if(x==1)cout<<">";else if(x == 0){cin>>x;if(x==1)cout<<"]";else if(x==0)cout&…

Three.js湖边小屋,包含gltf渲染、天空和水纹、光照阴影、运动的点光源、相机位置和文字切屏、粒子效果等

前期准备 使用vue3vitethree.jsgsap 开发 npm install three gsap 代码 <script setup> // 导入three.js import * as THREE from three; // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js; // 加载模型 import { GLT…

SQLserver中的游标的分类和游标的生命周期

SQLserver中的游标的分类 在 SQL Server 中&#xff0c;游标&#xff08;Cursor&#xff09;是一种数据库对象&#xff0c;用于逐行处理结果集中的数据。游标可以用于复杂的数据处理任务&#xff0c;尤其是那些不能通过简单的 SELECT 语句和 JOIN 操作完成的任务。SQL Server …

网络通信---三次握手

文章目录 概述第一次握手第二次握手第三次握手整体看下 小结 概述 “三次握手”&#xff08;Three-way Handshake&#xff09;是TCP/IP协议中建立一个可靠的连接时使用的一种机制。这个过程确保了两个网络实体&#xff08;通常是两台计算机&#xff09;在开始数据传输之前能够…

std::futrue异步操作结果的三种搭配使用

目录 一、std::future 应用场景 二、使用 std::async关联异步任务 三、使用std::packaged_task和std::future配合 四、std::promise和std::future配合 一、std::future std::future是C11标准库中的⼀个模板类&#xff0c;它表⽰⼀个异步操作的结果。当我们在多线程编程中使…

VBA技术资料MF194:屏蔽右键菜单

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

云计算概述

云计算的产生以及发展 分布式计算&#xff1a;包含了云计算和网格计算 云计算&#xff1a;以数据为中心进行的计算 网格计算&#xff1a;以计算为中心进行的计算 诞生-1999 初期的发展-2007-2008 加速发展-2009-2014 日渐成熟阶段-2015-目前 云计算的种类 公有云-第三方提供…