JavaScript 的 addEventListener 方法允许你为指定的 HTML 元素添加事件监听器。以下是一些常见的事件类型,可以使用 addEventListener 来监听它们:

1,点击事件 (click)

点击事件 (click): 当用户点击元素时触发。

element.addEventListener('click', function(event) {
console.log('Element was clicked!' + '点击位置:(' + event.clientX + ', ' + event.clientY + ')');
});

2,鼠标移入事件 (mouseover)

鼠标移入事件 (mouseover): 当鼠标指针移入元素时触发。

element.addEventListener('mouseover', function(event) {
console.log('Mouse is over the element!');
});

3,鼠标移出事件 (mouseout)

鼠标移出事件 (mouseout): 当鼠标指针移出元素时触发。

element.addEventListener('mouseout', function(event) {
console.log('Mouse is out of the element!');
});

4,键盘按键事件 (keydown, keyup)

键盘按键事件 (keydown, keyup): 当用户按下或释放键盘上的键时触发。

document.addEventListener('keydown', function(event) {
console.log('Key was pressed:', event.key);
});
document.addEventListener('keyup', function(event) {
console.log('Key was Released:', event.key);
});

5,输入事件 (input)

输入事件 (input): 当 <input>, <textarea> 或 <select> 元素的值发生变化时触发。这个函数会在input元素的值发生变化时被调用。

inputElement.addEventListener('input', function(event) {
// event参数包含了事件的相关信息。
// 你可以通过event.target来获取触发事件的元素
// 在这个例子中,event.target就是inputElement
var changedElement = event.target; // 你可以获取改变后的值
var newValue = changedElement.value;
// 现在你可以根据新的值做一些处理
console.log('Input value changed to:', newValue); // 或者你也可以直接对宿主对象做一些处理,效果是一样的
console.log('Input value changed:', inputElement.value);
});

加载事件 (DOMContentLoaded、load )

在 JavaScript 中,DOMContentLoaded 事件和 load 事件都与页面加载有关,但它们在触发时机和用途上有一些重要的区别。

DOMContentLoaded 事件

DOMContentLoaded事件在DOM树构建完成后触发,即当整个HTML文档被解析完成并且DOM树构建完成之后触发。此时,页面的CSS、JavaScript、图片等资源可能还没有完全加载完成,但是DOM结构已经可以访问并操作了。

DOMContentLoaded 事件在文档被完全加载和解析完成后触发,不等待样式表、图像和子框架的完成加载。换句话说,当 HTML 文档被完全加载和解析,DOM 树构建完成时,就会触发 DOMContentLoaded 事件。此时,页面中的脚本可以安全地访问 DOM 元素,并进行相关的 DOM 操作。

由于 DOMContentLoaded 事件不等待其他资源(如图片、CSS 文件等)的加载,因此它通常比 load 事件触发得更快。

6.1,加载事件 (DOMContentLoaded)

加载事件 (load): 当元素(如 <img>)或整个页面完成加载时触发。

// 使用 DOMContentLoaded 事件
document.addEventListener('DOMContentLoaded', function(event) {
console.log('DOMContentLoaded 事件触发');
// 在这里执行与 DOM 相关的操作
});

load 事件

load 事件在整个页面及所有依赖资源如样式表和图片完成加载后触发。这意味着,当 load 事件触发时,页面上的所有内容(包括图像、脚本文件、CSS 文件等)都已经完全加载到浏览器中,并且可以被访问和操作。

由于 load 事件需要等待所有资源加载完成,因此它通常比 DOMContentLoaded 事件触发得更晚。

另外,load 事件监听的对象可以是窗口、文档、也可以是页面的CSS、JavaScript、图片等资源。这一点对于页面上静态资源很大,或数量很多的场景下很有用。

6.2,加载事件 (load)

加载事件 (load): 当元素(如 <img>)或整个页面完成加载时触发。

imageElement.addEventListener('load', function(event) {
console.log('Image loaded!');
}); // 使用 load 事件
window.addEventListener('load', function(event) {
console.log('load 事件触发');
// 在这里执行需要等待所有资源加载完成的操作
});

用途和选择

如果你需要在 DOM 元素可用时立即执行某些操作(例如,添加事件监听器、修改 DOM 结构等),那么使用 DOMContentLoaded 事件是一个好选择。因为它不等待其他资源的加载,可以更快地执行代码。

如果你需要确保页面上的所有资源(包括图像、CSS 文件等)都已经加载完成后再执行某些操作(例如,计算图像的尺寸、应用某些样式等),那么应该使用 load 事件。


7,滚动事件 (scroll)

滚动事件 (scroll): 当元素或页面滚动时触发。

var lastScrollTop = 0;
window.addEventListener('scroll', function(event) {
console.log('Page scrolled!');
// 根据滚动位置进行相应操作
var scrollPosition = window.scrollY;
if (element.offsetTop <= window.innerHeight + window.scrollY) {
// 元素已经进入视口,可以执行相应的操作
} if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
// 页面已经滚动到底部,可以执行加载更多内容的操作
} // 判断页面滚动的方向
var currentScrollTop = window.scrollY;
if (currentScrollTop > lastScrollTop) {
// 向下滚动
} else {
// 向上滚动
}
lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; // 防止在顶部时出现负数 });

8,提交事件 (submit)

提交事件 (submit): 当表单尝试提交时触发。

formElement.addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表单默认提交行为
console.log('Form submitted!');
});

9,拖拽事件 (dragstart, dragover, drop 等)

拖拽事件 (dragstart, dragover, drop 等): 与拖拽相关的系列事件。

拖拽事件类型

当元素被拖拽时,会触发一系列的事件。这些事件包括:

  • dragstart:当用户开始拖拽元素时触发。
  • drag:在拖拽过程中持续触发。
  • dragenter:拖拽的元素进入目标区域时触发。
  • dragover:当元素在目标区域上方移动时触发。
  • dragleave:当元素离开目标区域时触发。
  • drop:当拖拽的元素被放置在目标区域时触发。
  • dragend:拖拽操作结束时触发。

示例:

element.addEventListener('dragstart', function(event) {
console.log('Dragging started!', event.target);
});
element.addEventListener('drag', function(event) {
console.log('Dragging!', event.target);
});
element.addEventListener('dragend', function(event) {
console.log('Dragging has stopped!', event.target);
});

10,触摸事件 (touchstart, touchmove, touchend 等)

触摸事件 (touchstart, touchmove, touchend 等): 在触摸屏设备上触发的事件。

element.addEventListener('touchstart', function(event) {
console.log('Touch started!', event.touches);
});

11,右键点击事件 (contextmenu)

右键点击事件 (contextmenu): 当用户右击元素时触发(通常用于自定义右键菜单)。

element.addEventListener('contextmenu', function(event) {
event.preventDefault(); // 阻止默认右键菜单显示
console.log('Right-click on the element!');
});

12,用户选择文本事件 (selectstart)

用户选择文本事件 (selectstart): 当文本被选中时触发(通常用于自定义右键菜单)。

element.addEventListener('selectstart', function(event) {
event.preventDefault(); // 阻止默认事件
console.log('Select start on the element!');
});

这些只是众多可用事件类型中的一部分。你可以根据需求选择合适的事件来监听。



其他示例:根据鼠标在元素停留时长判断是否真人操作

在JavaScript中,要判断鼠标移到元素上的时间和移出元素的时间,你可以使用mouseenter和mouseleave事件。这两个事件分别会在鼠标指针进入和离开元素时触发。你可以在这些事件的回调函数中记录时间戳,并据此计算出鼠标在元素上停留的时长。

以下是一个简单的示例代码,展示了如何实现这一功能:

// 获取你想要监听鼠标事件的元素
var element = document.getElementById('inputElementId'); // 定义变量来存储时间戳
var enterTime = 0;
var leaveTime = 0;
var duration = 0; // 监听 mouseenter 事件
element.addEventListener('mouseenter', function(event) {
// 记录鼠标进入元素的时间戳
enterTime = Date.now();
console.log('鼠标进入元素时间:', enterTime);
}); // 监听 mouseleave 事件
element.addEventListener('mouseleave', function(event) {
// 记录鼠标离开元素的时间戳
leaveTime = Date.now();
console.log('鼠标离开元素时间:', leaveTime); // 计算鼠标在元素上停留的时长
duration = leaveTime - enterTime;
console.log('鼠标在元素上停留的时长(毫秒):', duration);
});

在这段代码中,inputElementId应该替换为你想要监听鼠标事件的元素的ID。当鼠标指针进入该元素时,会记录一个时间戳到enterTime变量中;当鼠标指针离开该元素时,会记录另一个时间戳到leaveTime变量中,并计算两个时间戳之间的差值,得到鼠标在元素上停留的时长(以毫秒为单位)。

请注意,这种方法只能测量鼠标在单个连续进入和离开动作期间在元素上的停留时间。如果鼠标在元素内部移动并在不同位置触发其他事件(如mousemove),则不会影响这里计算的停留时长。

其他示例:禁止网页的复制粘贴和右键操作

要禁止网页的复制、粘贴和右键操作,可以使用 JavaScript 来实现。下面是一些示例代码:

document.addEventListener('copy', function(e) {
e.preventDefault();
alert('Copying is not allowed on this website.');
return false;
}); document.addEventListener('cut', function(e) {
e.preventDefault();
alert('Cutting is not allowed on this website.');
return false;
}); document.addEventListener('paste', function(e) {
e.preventDefault();
alert('Pasting is not allowed on this website.');
return false;
}); document.addEventListener('contextmenu', function(e) {
e.preventDefault();
alert('Right-clicking is not allowed on this website.');
return false;
}); /* 右键、复制都失效 */
document.oncontextmenu = new Function("event.returnValue=false");
document.onselectstart = new Function("event.returnValue=false");

可以结合 CSS 一起来实现:

使用纯CSS,你可以实现禁止用户选择文本(从而间接地限制复制操作)和隐藏右键菜单。但是,请注意,这些方法并不能完全阻止用户获取页面内容,因为它们不会阻止程序化的复制操作或其他高级用户技巧。

禁止文本选择(限制复制)

你可以通过CSS的user-select属性来禁止用户选择页面上的文本。这会让文本无法通过常规的鼠标拖拽方式被选中,从而间接限制了复制操作。

body {
-webkit-user-select: none; /* Chrome、Safari、Opera, Android */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+/Edge */
-o-user-select: none; /* Opera浏览器私有属性 */
user-select: none; /* 标准语法:禁止用户选择文本 */
-webkit-user-drag: none; /* 禁止用户拖拽 */
}

将这段代码添加到你的CSS样式表中,会禁止整个区域内的文本选择。如果你只想针对特定元素禁止选择,可以将body替换为相应的选择器。

隐藏右键菜单

隐藏右键菜单可以通过CSS的::context-menu伪元素来实现,但这并不是一个广泛支持的特性。更常见且兼容的方法是使用JavaScript来禁用contextmenu事件。不过,如果你坚持只使用CSS,并且不介意牺牲一些兼容性,可以尝试以下方法(主要在Firefox中有效):

* {
contextmenu: none;
} // 或者针对特定元素:
.no-contextmenu {
contextmenu: none;
}

然后,在HTML中为想要禁止右键菜单的元素添加no-contextmenu类:

<div class="no-contextmenu">右键点击这里不会有任何反应(在支持的浏览器中)</div>

由于这种方法兼容性有限,通常建议结合使用JavaScript来处理右键菜单的禁用。

虽然CSS可以提供一定程度的保护来防止用户复制文本或显示右键菜单,但这些方法并不是绝对安全的。熟练的用户或开发者仍然可以通过其他手段(如查看页面源代码、使用开发者工具、或编写脚本)来访问和复制页面内容。因此,这些CSS技巧更多是用于增强用户体验或防止无意的复制行为,而不是作为内容保护的严格措施。

JavaScript操作addEventListener监听触发事件的更多相关文章

  1. addEventlistener监听的事件完成一次后自动取消与jquery的one方法比较;animate动画制作,arguments.callee的用法

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. javascript事件监听与事件委托

      事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...

  3. 在Javascript中监听flash事件(转)

    在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.cal ...

  4. ThinkPHP 数据库操作(六) : 查询事件、事务操作、监听SQL

    查询事件 查询事件(V5.0.4+) 从 5.0.4+ 版本开始,增加了数据库的CURD操作事件支持,包括: 查询事件仅支持 find . select . insert . update 和 del ...

  5. nodejs事件的监听与事件的触发

    nodejs事件(Events) 一.事件机制的实现 Node.js中大部分的模块,都继承自Event模块(http://nodejs.org/docs/latest/api/events.html  ...

  6. JavaScript监听回车事件

    记录一下,兼容性也考虑到了,原文地址:JavaScript 监听回车事件 JS监听某个输入框 //回车事件绑定 $('#search_input').bind('keyup', function(ev ...

  7. Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)

    8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...

  8. JS 中的事件绑定、事件监听、事件委托

    事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有 ...

  9. JS 事件绑定、事件监听、事件委托详细介绍

    原:http://www.jb51.net/article/93752.htm 在JavaScript的学习中,我们经常会遇到JavaScript的事件机制,例如,事件绑定.事件监听.事件委托(事件代 ...

  10. JS 中的事件绑定、事件监听、事件委托是什么?

    在JavaScript的学习中,我们经常会遇到JavaScript的事件机制,例如,事件绑定.事件监听.事件委托(事件代理)等.这些名词是什么意思呢,有什么作用呢? 事件绑定 要想让 JavaScri ...

随机推荐

  1. 使用 JuiceFS 快照功能实现数据库发布与端到端测试

    今天的博客来自 JuiceFS 云服务用户 Jerry,他们通过使用 JuiceFS snapshot 功能,创新性地实现了数据的版本控制.Jerry,是一家位于北美的科技公司,利用人工智能和机器学习 ...

  2. AT cf17 final J Tree MST

    AT cf17 final J Tree MST 考场上想出的黑题,然而写挂了-- 思路 考场推出 boruvka 算法,会的直接跳过就好. 结论:一个点向另外一个点连出的最小边,一定在最小生成树上. ...

  3. PHP模块之ssh2

    php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成. libssh: https://www.libssh2.org/ ssh2: h ...

  4. 用文字“画出”状态图:用 AI+Mermaid.js 解决对象状态变化的处理问题

    什么是状态图 状态图用于描述对象在其生命周期内的状态变化及其处理,例如业务办理流程.病情处置等. 什么是Mermaid Mermaid.js是一个开源项目,它允许你通过简单的语法来绘制图表. 无论你是 ...

  5. Spring Boot 使用 slf4j 进行日志记录

    SLF4J,即简单日志门面(Simple Logging Facade forJava),不是具体的日志解决方案,它只服务于各种各样的日志系统.按照官方的说法,SLF4J 是一个用于日志系统的简单Fa ...

  6. AO SDK安装问题

    ao sdk for .net安装时,需要进行验证.net框架,没装vs的时候会提示 arcobjects SDK for the Microsoft.NT Framework requires a ...

  7. 《数据万象带你玩转视图场景》第一期:avif图片压缩详解

    前言 随着硬件的发展,不管是手机还是专业摄像设备拍出的图片随便可能就有几M,甚至几十M,并且现在我们处于随处可及的信息海洋里,海量的图片带来了存储问题.带宽问题.加载时延问题等等.对图片信息进行有效的 ...

  8. 腾讯云 TStor 私有云存储获统信+海光/兆芯官方认证

    腾讯云 TStor 是一款分布式存储产品,致力于解决私有云.混合云下的各类存储需求.产品紧跟国内信创生态,持续加强自主可控能力.目前,TStor 已经支持国内主流国产操作系统和硬件,如中标麒麟操作系统 ...

  9. iOS画中画

    iOS 14 画中画 打开项目后台模式 创建视频播放源 let url = Bundle.main.url(forResource: "annie", withExtension: ...

  10. 【前端】【样式】CSS居中的三种方式

    @charset "utf-8"; /* CSS Document */ /** *开发者:萌狼蓝天 *当前版本:v0.1[Debug] *最后更新日期:20210918 **/ ...