JavaScript的对象事件处理程序

一、对象的事件 

对象的事件是指在一个对象上发生的特定动作或状态改变。对象可以是现实世界中的物体、概念、数据结构等。根据对象的类型和功能,可能会有不同类型的事件。

对象的事件一般由对象的方法或属性来处理和触发。通过定义对象的方法和属性,可以在对象上触发相应的事件,并通过事件处理器来处理这些事件。对象的事件可以用来实现对象之间的交互和协作,以及对对象的操作和状态的控制。

常见的对象事件包括:

  1. 表单事件:当用户点击一个可交互的对象(如按钮等)时触发。
  2. 键盘事件:当用户在键盘上按下或释放一个键时触发。
  3. 鼠标事件:当用户在对象上移动鼠标、点击鼠标按钮或滚动鼠标滚轮时触发。
  4. 定时事件:当到达指定的时间点或间隔时触发的事件,常用于定时任务和计时器功能。

对象的事件通常由事件监听器事件处理器来监听和处理。事件监听器是一个特定的方法或函数,用于接收并处理特定的事件。当事件发生时,事件监听器会被调用,执行相应的操作。

二、监听鼠标事件

 监听鼠标事件是指在程序中捕获和响应鼠标动作的事件。常见的鼠标事件包括鼠标点击、移动、滚轮滚动等。

常用的鼠标监听事件有:

        mousedown:按下鼠标键时触发

        mouseup:抬起鼠标键时触发

        click:单击鼠标时触发

        dblclick:在同一个元素上双击鼠标时触发

        mouseenter:鼠标进入一个节点时触发,进入子节点不会触发这个事件

        mouseleave:鼠标离开一个节点时触发,离开父节点不会触发这个事件

        wheel:在浏览器窗口滚动鼠标滚轮时触发

1.首先创建一个事件对象,以便对其操作


<head>
    <style>
        .box{
            width:  60px;
            height: 30px;
            background-color: aliceblue;
            border: 2px solid black;
            text-align: center;
        }

        body {  
            height: 3000px; /* 增加浏览器页面高度以便滚动 */  
        }
    </style>
</head>
<body>

    <div class="box" id="b1">
        事件
    </div>

</body>

 2.获取它的节点,并为这个节点创建一个鼠标事件监听器对象或函数,用于处理鼠标事件。

 mousedown:按下鼠标键时触发

        box = document.getElementById("b1");

        // 为某个节点添加事件监听器
        box.addEventListener( "mousedown",  
            function(){
                console.log("你的鼠标按下了!");
            } 
        );

当鼠标左键按下时就会在控制台打印如下结果: 

 mouseup:抬起鼠标键时触发

        box.addEventListener( "mouseup",  
            function(){
                console.log("你的鼠标抬起了!");
            } 
        );

当鼠标左键松开时就会在控制台打印如下结果:  

 click:单击鼠标时触发

        box.addEventListener( "click",  
            function(){
                console.log("你的鼠标单击了!");
            } 
        );

 当单击时时就会在控制台打印如下结果:

 dblclick:在同一个元素上双击鼠标时触发

        box.addEventListener( "dblclick",  
            function(){
                console.log("你的鼠标双击了!");
            } 
        );

  当单击时时就会在控制台打印如下结果:

 mouseenter:鼠标进入一个节点时触发,进入子节点不会触发这个事件

        box.addEventListener( "mouseenter",  
            function(){
                console.log("你的鼠标进入目标元素了!");
            } 
        );

当鼠标移动到事件框时就会在控制台打印如下结果:   

 

 mouseleave:鼠标离开一个节点时触发,离开父节点不会触发这个事件

        box.addEventListener( "mouseleave",  
            function(){
                console.log("你的鼠标离开目标元素了!");
            } 
        );

当鼠标移出事件框时就会在控制台打印如下结果: 

 

 wheel:在浏览器窗口滚动鼠标滚轮时触发(需要为浏览器窗口对象添加事件监听器)

        window.addEventListener( "wheel",  
            function(){
                console.log("你的鼠标滚轮正在滚动...");
            } 
        );

 当鼠标滚轮滚动时就会在控制台打印如下结果:

 

三、监听键盘事件

常用的键盘事件有:

        keydown:按下键盘时触发

        keyup:抬起键盘时触发

 1.首先创建一个事件对象,以便对其操作


<head>
    <style>
        #output {  
            margin-top: 20px;  
            padding: 10px;  
            border: 1px solid #ccc;  
            width: 300px;  
            height: 100px;  

            /*  超出这个盒子的内容,以纵向滚动的方式展示 */
            overflow-y: scroll;
            
            /* 保持空白符和换行符 */ 
            white-space: pre-wrap; 
        }  
    </style>  
</head>  
<body>  

    <div id="output"></div>  

</body>  

 用上面这个框来存放输出的字符串

 2.获取它的节点,并为这个节点创建一个键盘事件监听器对象或函数,用于处理键盘事件。 

 keydown:按下键盘时触发

        // 获取显示按键信息的div节点
        const outputDiv = document.getElementById('output');  
  
        // 监听整个文档的keydown事件  
        document.addEventListener('keydown',

            function(event) {  

                // 获取按键的代码(包括数字键和特殊键,如箭头键、功能键等)   
                const keyCode = event.key; 
                
                // 拼凑输出字符串
                const message = `键盘 ${keyCode}  被按下`; 

                // 将拼凑好的字符串,添加到输出区域  
                outputDiv.textContent += message + '\n';   

            }
        );  

当按下键盘上的a,b,c就会出现以下结果:

keyup:抬起键盘时触发 

        document.addEventListener( "keyup",
            function(event){
                console.log(`有键盘按键抬起: ${event.key}`);
            }
        )

 当放开键盘上的a,b,c就会在控制台出现以下结果:

四、监听表单事件 

常用的表单事件有:

        submit:单击提交时触发

        reset:单击重置时触发

        select:选中文本时触发

 1.首先创建一个表单事件对象,以便对其操作

    <!-- 简单的HTML表单 -->  
    <form id="myForm" >  
        姓名: <input type="text" id="name" value="在此处输入你的姓名">  <br>  
        邮箱: <input type="email" id="email" value="在此处输入你的邮箱">  <br>  
        <input type="submit" value="提交">
        <input type="reset" value="重置">
    </form>  

  2.获取它的节点,并为这个节点创建一个表单事件监听器对象或函数,用于处理表单事件。

 submit:单击提交时触发

        // 获取表单节点
        const form = document.getElementById('myForm');  
  
        // 添加“表单提交”事件监听器  
        form.addEventListener('submit', 
            function(event) {  
            event.preventDefault();   // 阻止表单的“默认提交行为”
  
            // 弹出警告框(在实际应用中,你可能会在这里进行AJAX请求或其他处理)  
            alert('表单提交按钮被按下! (但默认提交行为被截止了)');  
  
            // 你可以在这里添加其他代码来处理表单数据  
            // 例如,获取输入值:  
            const name = document.getElementById('name').value;  
            const email = document.getElementById('email').value;  
            console.log('Name:', name);  
            console.log('Email:', email);  
            }
        ); 

其中阻止表单的“默认提交行为”  (即:将数据发送到表单的 action 属性指定的 URL,并在那里进行处理))然而,在前端开发中,经常会有这样的需求:在表单提交之前进行一些客户端验证在这些情况下,你需要阻止表单的默认提交行为。

比如: 你可以在提交表单之前检查用户输入的数据是否有效(如检查必填字段是否已填写,电子邮件地址格式是否正确等)。如果数据无效,你可以显示错误消息而不提交表单

点击提交时出现以下结果:

 

 reset:单击重置时触发

        // 添加表单重置事件监听器  
        form.addEventListener('reset', 
            function(event) {  
            // 弹出警告框
            alert('表单已经重置! ');  

            }
        );

点击重置时出现以下结果:

 select:选中文本时触发

        // 1.获取姓名输入框节点
        const inputElement = document.getElementById('name'); 
        // 2.为表单的姓名输入框添加 select 选中事件监听器  
        inputElement.addEventListener('select', 
            function(event) {  
  
            // 输出一条消息来表示事件已被触发  
            alert('输入框中的文本被选中了!!!');  
            }
    );

选中“李四”时就会运行出以下结果: 

 也可以输出选择的文本范围(起始位置和结束位置)

        inputElement.addEventListener('select', 
            function(event) {  


            // 输出选择的文本范围(起始位置和结束位置) 
            // Event.target属性返回事件当前所在的节点 
            console.log('选中的文本范围:', event.target.selectionStart, event.target.selectionEnd);  //打印选中文本的起始索引和结束索引
  
            // 你也可以获取并输出实际选中的文本,但需要注意浏览器兼容性  
            // 以下代码在大多数现代浏览器中有效,但在某些旧版浏览器中可能不适用  
            // 注意: selectionEnd 属性返回的是选择范围的结束位置的下一个字符的索引
            const selectedText = inputElement.value.substring(event.target.selectionStart, event.target.selectionEnd);  
            console.log('已选中文本:', selectedText);   
            }
    );

 选中“李四”时控制台就会打印出以下结果:

 五、定时事件

 要监听定时事件,使用JavaScript中的 setInterval函数来设置定时器。

1.设置两个函数在控制台打印出定时任务

        function func1(){
            console.log("定时任务: 喝水!");
        }

        function func2(){
            console.log("定时任务: 去超市买酱油!");
        }

2.使用 setInterval函数监听定时事件

        // 每隔1000ms执行一次定时任务(无限重复)
        setInterval(func1, 1000); 
        // 5秒以后(仅仅)执行一次定时任务!返回的是该定时器唯一编码,可利用该编码临时取消任务
        const time_id = setTimeout(func2, 5000); 
        // 临时通知该定时器取消任务 
        clearTimeout(time_id);  


        // 你可以在这里继续执行其他代码,setTimeout 不会阻塞主线程 
        console.log("正在执行别的代码...");

运行结果如下: 

其中 函数1每隔1000ms执行一次定时任务(无限重复);而函数2已被通知该定时器取消任务,所以不会执行,但是它以下的代码不会被阻塞,可以照样执行

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

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

相关文章

Win11 CLion Qt开发探索

文章目录 一、Win11 CLion Qt需要的环境二、环境说明三、Win11 CLion Qt 开发步骤四、CLion Qt CMake脚本相关配置4.1 在CLion里如何使用资源文件.qrc4.2 Qt6 cmake如何添加ts翻译文件 五、程序打包 本篇博客介绍在Win11上使用CLion来编写Qt QWidget项目。 视频讲解&#xff1a…

Windows Server2012 R2搭建NFS服务器

正文共&#xff1a;1024 字 23 图&#xff0c;预估阅读时间&#xff1a;1 分钟 在测试vCenter的集群操作时&#xff0c;出现了共享vSAN错误的问题&#xff0c;导致无法继续。我也只好先创建一个共享NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;存储…

信息安全工程师(77)常见网络安全应急事件场景与处理流程

前言 网络安全应急事件场景多样&#xff0c;处理流程也需根据具体情况灵活调整。以下将详述几种常见的网络安全应急事件场景及其处理流程。 一、数据泄露事件 场景描述&#xff1a; 数据泄露是指敏感、受保护或机密数据被未经授权的个人复制、传输、查看、窃取或使用。这种事件…

win10下MMSegmentation自定义数据集

下载1.2.1版本: Releases open-mmlab/mmsegmentation GitHub 安装环境 本地torch环境为1.9.1 pip install -U openmim mim install mmengine mim install "mmcv>=2.0.0" 报mmcv版本不匹配的问题,形如:MMCV==X.X.X is used but incompatible. Please inst…

低代码解锁跨平台应用开发新境界

数字化转型中&#xff0c;企业面临应用开发挑战&#xff0c;低代码平台成为理想选择。ZohoCreator提供统一开发环境、拖拽设计、预置模板等&#xff0c;支持高效构建跨平台应用&#xff0c;确保数据安全与合规&#xff0c;助力企业数字化转型。 一、低代码平台是什么&#xff1…

yolov8涨点系列之C2f模块改进主分支

文章目录 C2F 模块介绍定义与基本原理应用场景 C2f模块修改步骤(1) C2f_up模块编辑(2)在__init_.pyblock.py中声明&#xff08;3&#xff09;在task.py中声明yolov8引入C2f_up模块yolov8.yamlyolov8.yaml引入C2f_up模块 C2f改进对YOLOv8检测具有多方面的好处 C2F 模块介绍 定义…

数据结构算法篇--递归(c语言版)

目录 1.递归 1.1求阶乘&#xff1a; 1.2.斐波那契数 1.3. 求幂 1.递归 在C语言中&#xff0c;递归是一种函数调用自身的方法&#xff0c;用来解决一些具有重复性质的问题。例如&#xff0c;计算阶乘、斐波那契数列等问题都可以通过递归实现。 递归在书写的时候&#xff0…

[大模型]视频生成-Sora简析

参考资料&#xff1a; Sora技术报告https://openai.com/index/video-generation-models-as-world-simulators/4分钟详细揭密&#xff01;Sora视频生成模型原理https://www.bilibili.com/video/BV1AW421K7Ut 一、概述 相较于Gen-2、Stable Diffusion、Pika等生成模型的前辈&am…

【数据仓库】Hive 拉链表实践

背景 拉链表是一种数据模型&#xff0c;主要是针对数据仓库设计中表存储数据的方式而定义的&#xff1b;顾名思义&#xff0c;所谓拉链表&#xff0c;就是记录历史。记录一个事务从开始一直到当前状态的所有变化的信息。 拉链表可以避免按每一天存储所有记录造成的海量存储问题…

UnityAssetsBundle字体优化解决方案

Unity开发某个项目&#xff0c;打包后的apk包体已经高达1.25G了&#xff0c;这是非常离谱的。为了不影响用户体验&#xff0c;需要将apk包体缩小。因为项目本身不包含很多模型以及其他大型资源&#xff0c;排除法将AB包删除&#xff0c;发现app本身就100多M。 由此可以锁定是AB…

高通Quick板上安装编译Ros1 noetic,LeGO_LOAM,FAR_Planner和rslidar_sdk

环境要求&#xff1a; 这里quick板上安装的是Ubuntu20.04版本 Ros Noeti安装&#xff1a; 1.设置软件源&#xff1a; 官方提供的软件源&#xff1a; sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.…

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG 向量数据库是一种特殊类型的数据库&#xff0c;在人工智能应用中发挥着至关重要的作用。 在向量数据库中&#xff0c;查询与传统的关系数据库不同。它们不是进行精确匹配&#xff0c;而是执行相似性搜…

如何在 uniapp 中实现图形验证码

全篇大概2000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间10分钟。 什么是图形验证码&#xff1f; 图形验证码&#xff08;也称为图片验证码或验证码图像&#xff09;通常用于防止机器人自动提交表单&#xff0c;确保用户是人工操作。 一、需求 我们希望在一个…

mysql error:1449权限问题 及 用户授权

一、权限问题 Got error: 1449: The user specified as a definer (skip-grants userskip-grants host) does not exist when using LOCK TABLES 在迁移数据库时&#xff0c;定义的definer&#xff0c;在两个数据库之间不同步时&#xff0c;要将不存在的definer改成数据库中已…

uniapp+vue加油服务系统 微信小程序

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 基于微信小程序的加油服务系统设计为微信小程序和后台管理两个服务端&#xff0c;并对此设计相应的功能模块如下&#x…

【MFC编程(一)】MFC概述

文章目录 MFC概述MFC组成MFC对比Windows APIMFC类库基类CObject命令发送类CCmdTarget应用程序结构类应用程序线程支持类CWinThread/CWinApp文档类CDocument文档模板类CDocTemplate 窗口类窗口基类CWnd边框窗口类CFrameWnd视图类CView MFC概述 MFC&#xff08;Microsoft Founda…

如何解决传统能源企业后备人才不足、人才规划缺失问题

如何解决传统能源企业后备人才不足、人才规划缺失问题 很多传统能源企业都面临着老员工逐渐退休&#xff0c;新员工还没有培养起来的问题&#xff0c;缺乏提前对人力资源规划的意识&#xff0c;导致当企业要开展新业务时或者老员工离职的时候&#xff0c;缺乏合适的人选。特别…

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要&#xff1a;本文以服装品牌零售业态融合为背景&#xff0c;探讨信息流优化和资金流创新的重要作用&#xff0c;并结合开源 AI 智能名片 S2B2C 商城小程序&#xff0c;分析其如何进一步推动服装品牌在零售领域的发展&#xff0c;提高运营效率和用户体验&#xff0c;实现商业…

C#编程:VSTO在Excel工作表中输出List数据

标题 C#编程&#xff1a;VSTO在Excel工作表中输出List数据 正文 一、问题&#xff1a; 我想把C#中的List<T>输出到Excel工作表中 二、思路方法&#xff1a; &#xff08;1&#xff09;用程序创建一个List<T> &#xff08;2&#xff09;输出到当前工作表 三、代码&a…