【JavaScript】事件--总结

news2025/2/25 14:24:56

千锋

1.Event 对象

代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

 div{
        width: 200px;
        height: 200px;
        background-color: yellow;
    }
</style>
<body>
    <input type="text" id="username">
<div id="box1"></div>
</body>
<script>
    username.onkeyup = function(evt){
        // console.log(evt.keyCode)
        if(evt.keyCode===13){
            console.log("创建节点")
        }
    }
    box1.onclick = function(a) {
        console.log(a)
    }
</script>

在这里插入图片描述
在输入框输入一个a,按下回车键,控制台输出“创建节点”。
键盘按键键码值(keyCode)对照表
点击div,会出现点击位置等参数:
点击黄色正方体的任意位置都会返回你点击的位置距离浏览器界面的偏移量

box1.onclick = function(evt) {
    console.log(evt.clientX,evt.clientY);
}
//evt.clientX,evt.clientY:距离浏览器可视窗口的左上角的坐标值

在这里插入图片描述

2.鼠标跟随

做一个鼠标移上“你的头像”,就在旁边显示“头像介绍”效果
在这里插入图片描述

<!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>
        *{padding:0;  margin:0;}
        
        #box{
            width: 200px;
            height: 50px;
            background-color: red;
            position: relative;
            margin: 100px;
        }
        #box p{
            width: 300px;
            height: 200px;
            background-color: aqua;
            position: absolute;
            left: 100px; top: 100px;
            display: none;
            pointer-events: none;
            /* 穿透 */
            z-index: 100;
        }
        </style>
</head>
<!-- 做一个点击头像然后显示内容 -->
<body>
    <div id="box">
        你的头像
        <p>
            头像介绍
        </p>
    </div>
</body>
<script>
 
box.onmouseover = function(){
    this.firstElementChild.style.display="block";
}
box.onmouseout = function(){
    this.firstElementChild.style.display="none";
}
box.onmousemove=function(evt){
    // console.log(evt.offsetX,evt.offsetY)
    this.firstElementChild.style.left=evt.offsetX+50+"px";
    this.firstElementChild.style.top=evt.offsetY+50+"px";  
}

</script>
</html>

offset/page/screen/client
大致按照从小到大顺序依次解析:

  1. event.offsetX、event.offsetY
    鼠标相对于事件源元素(srcElement)的X,Y坐标,也作相对于触发事件的对象,只有IE事件有这2个属性,标准事件没有对应的属性。
  2. event.clientX、event.clientY
    鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性
  3. event.pageX、event.pageY
    类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标;页面没有滚动时,event.pageX、event.pageY的值与event.clientX、event.clientY的值相等;滚动后大于event.clientX、event.clientY的值。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性。
  4. event.screenX、event.screenY
    鼠标相对于用户显示器屏幕左上角的X,Y坐标。标准事件和IE事件都定义了这2个属性

evt.clientX,evt.clientY:距离浏览器可视窗口的左上角的坐标值,这个值是随着滚动条而变化的,实时获取你当前div盒子的位置
pageX、pageY:距离页面的左上角的坐标值是一个固定值,不随着滚动条变化,只和初始位置有关
offsetX、offsetY:距离触发元素左上角的坐标值,就是相对于盒子的位置,距离这个盒子边框的位置,和浏览器以及页面无关

3.鼠标拖拽:

鼠标按下即可拖拽:

鼠标拖拽

<!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>
        *{padding:0;  margin:0;}
        
        #box{
            width: 200px;
            height: 200px;
            background-color: red;
            position: absolute;
        }
    </style>
</head>
<!-- 做一个鼠标点击按住不丢然后可以将内容拖拽到页面任意位置放置 -->
<body>
    <div id="box"></div>
</body>
<script>
    box.onmousedown = function() {
        console.log("down")
    // 鼠标按下之后可以拖拽,整个页面可动,使用document
    document.onmousemove = function(evt) {
        // 让拖拽点处于盒子中心位置

        var x=evt.clientX-box.offsetWidth/2
        var y=evt.clientY-box.offsetHeight / 2
        
        // 让盒子不要出界,让窗口宽度减去盒子宽度,作为一个临界值赋给拖拽点
       if(y<=0) y=0
       if(x<=0) x=0
        if(x>=document.documentElement.clientWidth-box.offsetWidth)
        x=document.documentElement.clientWidth - box.offsetWidth
        if(y >=document.documentElement.clientHeight - box.offsetHeight)
       y=document.documentElement.clientHeight - box.offsetHeight
        box.style.left=x+"px"
        box.style.top= y +"px"

        }
    }
    box.onmouseup = function() {
        console.log("up")
        // 鼠标抬起之后取消拖拽
        document.onmousemove = null  
    }
    
</script>
</html>

4.右键自定义菜单:

在这里插入图片描述

<!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>
</head>
<style>
    *{
        margin:0;padding:0;
    }
    ul{
        list-style: none;
        width: 200px;
        padding: 10px;
        border:1px solid black;
        display: none;
        position: absolute;
    }
    ul li:hover{
        background: skyblue;

    }
</style>
<body>
    <ul id="list">
        <li class="a">1</li>
        <li class="a1">2</li>
        <li class="a2">3</li>
    </ul>
</body>
<script>
// 阻止浏览器右键的默认行为
document.addEventListener("contextmenu",function(evt){
    evt.preventDefault()
    ///让自定义的右键行为显示出来
    list.style.display = "block"
    var x=evt.clientX
    var y=evt.clientY
    //防止右键行为的div跑出浏览器边界
    if(document.documentElement.clientHeight-list.offsetHeight<=y)
    y=document.documentElement.clientHeight-list.offsetHeight
    if(document.documentElement.clientWidth - list.offsetWidth<=x)
    x=document.documentElement.clientWidth - list.offsetWidth
    list.style.top =y+"px"
    list.style.left=x+"px" 
})

//给每一个li都加上点击事件,不用id,使用事件委托
//减少多个函数的绑定的性能处理  ||  动态添加li,也会有事件处理
list.onclick = function(evt) {
    console.log("list",evt.target)
    //低版本的是:ect.srcElement
    if(evt.target.className==="a"){
        list.style.backgroundColor = "yellow" 
    }
    if(evt.target.className==="a1"){
        list.style.backgroundColor = "blue" 
    }
    if(evt.target.className==="a2"){
        list.style.backgroundColor = "red" 
    }
}
// 双击左键让右键行为消失
document.addEventListener("dblclick",function(){
    list.style.display = "none"
})
</script>
</html>

addEventListener

onclick只能响应一次,同样的id再定义一个onclick只会被覆盖。而.addEventListener可以让绑定的多个事件同时响应。
事件解绑:
点击一次实现后就解绑,再点击就无效
1.使用this指向事件,点击一次执行后就赋值为null
2.使用addEventListener实现点击,之后removeEventListener解开点击事件

 <!-- 事件只能被响应一次,响应一次后就解开 -->
    <button id="btn">抽奖</button>
</body>
<script>
    // 初级
    // btn.onclick = function() {
    //    console.log("谢谢惠顾")
    //     this.disabled = true
    // }

    // 高级:
    // 第一种方法
    // btn.onclick = function() {
    //     console.log("谢谢惠顾")
    //     this.οnclick=null
    // }
// 第二种方法
// function handler() {
//     console.log("谢谢惠顾")
//     btn.removeEventListener("click", handler)
// }
//     btn.addEventListener("click", handler)

</script>

disabled 属性是一个布尔属性。 disabled 属性规定应该禁用的 元素。 被禁用的 input 元素是无法使用和无法点击的。 disabled 属性进行设置

鼠标事件

单击事件:click
双击事件:dblclick
右键点击事件:contextmenu
鼠标按下事件:mousedown
鼠标移动事件:mousemove(经过按钮区域就会触发)
鼠标抬起事件:mouseup
onclick是点击,一个完整的点击动作由按下鼠标键onmousedown,和弹起鼠标键onmouseup完成,所以很多时候,onclick事件和onmousedown,onmouseup混用的时候会出现冲突。

鼠标移入移出mouseover mouseout
鼠标移入移出:mouseenter mouseleave

over out区分比较模糊,移出小盒子同时触发移入大盒子,更加一体化。
enter leave区分比较明确,移出小盒子不会触发移入大盒子,移入小盒子同时触发移入大盒子,因为大盒子包含小盒子的原因。

mouseover: 只要鼠标指针移入事件所绑定的元素或其子元素,都会触发该事件
mouseenter: 只有鼠标指针移入事件所绑定的元素时,才会触发该事件
① 只要鼠标指针移入(或移出)事件所绑定的元素或其子元素,都会触发
mouseover(或mouseout)事件
② 只有鼠标指针移入(或移出)事件所绑定的元素时,才会触发
mouseenter(或mouseleave)事件

键盘事件

键盘按下onkeydown 键盘抬起 onkeyup
获取焦点:focus 失去焦点:blur
change 获取焦点,当失去焦点后对比里面内容不一样时才会触发
oninput:当输入内容时立即触发
oninput 事件在用户输入时触发。
该事件在 或 元素的值发生改变时触发。
提示: 该事件类似于 onchange 事件。不同之处在于 oninput 事件在元素值发生变化是立即触发, onchange 在元素失去焦点时触发。另外一点不同是 onchange 事件也可以作用于 < keygen > 和 < select > 元素。
提交事件:onsubmit 重置事件:onreset

移动端触摸事件

touchstart touchmove touchend:

touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。

touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。

touchend事件:当手指从屏幕上离开的时候触发。
  
黑马:

target和this的不同:

在这里插入图片描述

事件委托:

在这里插入图片描述
点击3,背景就变为粉色
在这里插入图片描述

阻止右键默认行为

在这里插入图片描述

鼠标事件对象:

在这里插入图片描述
在这里插入图片描述

键盘事件:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

JavaScript 事件

文章目录JavaScript 事件HTML 事件常见的HTML事件JavaScript 可以做什么?JavaScript 事件 HTML 事件是发生在 HTML 元素上的事情。 当在 HTML 页面中使用 JavaScript 时&#xff0c; JavaScript 可以触发这些事件。 HTML 事件 HTML 事件可以是浏览器行为&#xff0c;也可以是…

babel做兼容处理 到底怎么使用?

1.背景 日常项目开发中总是避免不了对低版本浏览器做一些兼容处理&#xff0c;最常见的手段就是结合编译工具使用babel来处理一些语法的兼容&#xff0c;但是每次使用的时候其实Babel的配置和使用到的相关库总是云里雾里&#xff0c;网上的各种推荐方案眼花缭乱不知道到底应该…

自定义DotNetCore 项目模板

在进行代码开发时候&#xff0c;各自的团队或者公司都会有服务自己要求的项目代码模板&#xff0c;再创建新的项目时&#xff0c;都需要按照模板规范进行定义&#xff0c;NET支持自定义项目模板&#xff0c;这样在进行项目创建时就会高效很多。 官方参考文档&#xff1a;dotne…

软测复习01:软件测试概述

文章目录软件测试的目的软件测试的定义软件测试与软件开发软件测试发展软件测试的目的 基于不同的立场&#xff0c;存在着两种完全不同的测试目的 从用户的角度出发&#xff0c;希望通过软件测试暴露软件中隐藏的错误和缺陷&#xff0c;以考虑是否可接受该产品。从软件开发者的…

Java当中的定时器

目录 一、什么是定时器 二、Java当中的定时器 ①schedule()方法&#xff1a; ②TimerTask ​编辑 ③delay 三、实现一个定时器 前提条件: 代码实现: ①确定一个“任务”&#xff08;MyTask)的描述&#xff1a; ②schedule方法&#xff1a; ③需要一个计时器 属性…

MAT-内存泄漏工具使用

目录 一、MAT简介 1.1 MAT介绍 1.2 MAT工具的下载安装 二、使用MAT基本流程 2.1 获取HPROF文件 2.2 MAT主界面介绍 2.3 MAT中的概念介绍 2.3.1 Shallow heap 2.3.2 Retained Heap 2.3.3 GC Root 2.4 MAT中的一些常用的视图 2.4.1 Thread OvewView 2.4.2 Group 2.…

复杂工况下少样本轴承故障诊断的元学习

摘要&#xff1a;近年来&#xff0c;基于深度学习的轴承故障诊断得到了较为系统的研究。但是&#xff0c;这些方法中的大多数的成功在很大程度上依赖于大量的标记数据&#xff0c;而这些标记数据在实际生产环境中并不总是可用的。如何在有限的数据条件下训练出鲁棒的轴承故障诊…

线程状态到底是5种还是六种?傻傻分不清楚

目录 从操作系统层面上描述线程状态 从javaAPI层面上理解线程的6种状态 线程的状态转换. NEW --> RUNNABLE 1.RUNNABLE <--> WAITING 2.RUNNABLE <--> WAITING 3.RUNNABLE <--> WAITING 1.RUNNABLE <--> TIMED_WAITING 2.RUNNABLE <--&…

开源天气时钟项目删减和更新

开源天气时钟项目删减和更新&#x1f4cc;原项目开源地址&#xff1a;https://gitee.com/liuzewen/ESP8266-SSD1306-Watch-mini ✨本文只针对Arduino IDE平台代码进行删减和更新。 &#x1f4fa;按键菜单功能 &#x1f33c;天气时钟功能整体架构描述 代码中所使用的库&…

【MySQL】十,SQL执行流程

MySQL中的SQL执行流程 MySQL的查询流程 查询缓存 Server 如果在查询缓存中发现了这条 SQL 语句&#xff0c;就会直接将结果返回给客户端 如果没有&#xff0c;就进入到解析阶段&#xff08;MySQL 8.0 已经废弃了查询缓存功能&#xff09;。 解析器 在解析器中对 SQL 语句进行…

36、基于STM32的电子闹钟(DS1302)

编号&#xff1a;36 基于STM32的电子闹钟&#xff08;DS1302&#xff09; 功能描述&#xff1a; 本设计由STM32单片机液晶1602按键DS1302时钟模块声光报警模组成。 1、采用STM32F103最小系统。 2、利用DS1302芯片提供时钟信号 3、液晶1602实时显示年月日、时分秒、星期等信息…

java线程池原理

背景&#xff1a;为什么需要线程池java中的线程池是运用场景最多的并发框架&#xff0c;几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中&#xff0c;合理的使用线程池能够带来3个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消…

(1分钟了解)SLAM的七大问题:地图表示、信息感知、数据关联、定位与构图、回环检测、深度、绑架

编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;SLAM问题也被称为是CML问题。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…

(JMLR-2019)NAS综述鼻祖-神经架构搜索:一项调查

神经架构搜索&#xff1a;一项调查 paper题目&#xff1a;Neural Architecture Search: A Survey paper是博世人工智能中心发表在JMLR 2019的工作 paper链接&#xff1a;地址 Abstract 过去几年&#xff0c;深度学习在图像识别、语音识别和机器翻译等各种任务上取得了显着进步…

【C++】stl---vector的模拟实现(超级详细,万字详解)

文章目录前言vector的成员属性构造函数size函数cacpcity函数begin和end函数reserve函数insert函数push_back函数[]操作符重载析构函数拷贝构造函数赋值操作符重载erase函数pop_back反向迭代器反向迭代器模板反向迭代器的构造函数运算符重载- -运算符重载*引用操作符重载&#x…

Spring AOP 企业级应用 - 统一功能处理

1.统一用户登录权限效验统一用户登录权限效验使用传统的 AOP 能否解决问题呢 ? Component Aspect // 标识当前类为一个切面 public class LoginAOP {// 定义切点 (拦截的规则) - 拦截 UserController 中的所有方法Pointcut("execution(* com.example.demo.controller.Tes…

React Hooks 基础、实现、原理

React Hooks 基础、实现、原理题外话为什么要有Hooks&#xff1f;但是Class Component 的用法也有缺陷&#xff1a;1.组件复用变的困难2.JavaScript本身的缺陷函数式React HooksuseStateuseEffectuseCallback、useMemouseReducer最后题外话 2023了&#xff0c;新年快乐&#x…

【javascript】DOM 案例

点击查看密码 &#xff1a;就是把type等于password改为text即可&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…

电力系统强大的Gurobi 求解器的学习(PythonMatlab)

到底有多强大&#xff0c;看看就知道&#xff0c;必须&#x1f44d;&#x1f44d;&#x1f44d;&#xff1a; 目录 1 概述 2 算例理解【Python】 2.1 算例1——详细入门 2.2 算例2——一般线性规划问题 2.3 算例3——非凸问题 3 算例升级【Matlab】 3.1 模型 3.2 电力系统…

Python2.x 与 3​​.x 版本到底有啥区别?

嗨害大家好鸭&#xff01;我是小熊猫~ 今天给大家带来一点小干货~ 很多人对于python的版本有些许疑问&#xff0c; 今天就来给大家说说看~ Python学习资料电子书点击此处跳转文末名片 Python 的 3​​.0 版本&#xff0c;常被称为 Python 3000&#xff0c;或简称 Py3k。 相对…