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. 2个月搞定计算机二级C语言——真题(10)解析

    1. 前言 本篇我们讲解2个月搞定计算机二级C语言--真题10 2. 程序填空题 2.1 题目要求 2.2 提供的代码 #include <stdio.h> #pragma warning ...

  2. 基于sqli-labs Less-7 的sql高权读写注入详解

    1. MySQL高权限读写简介 1.1 前置知识 数据库的高权用户对服务器上的文件进行读取写入操作,从而可以进行写入一句话木马来获得服务器权限或者读取服务器上的配置型文件等注入行为. select l ...

  3. PXI板卡的封装和接口形式

    PXI模块 PXI标准同时定义了3U和6U模块适用的机械尺寸与连接器形式.3U模块在模块底部安装有一个助拔手柄.在顶部和底部通过螺钉固定,底部的固定螺钉部分隐藏在助拔手柄中.占用超过一个槽位的模块可以 ...

  4. getRawType:获取数据类型,返回结果为 Number、String、Object、Array等

    function getRawType(value) { return Object.prototype.toString.call(value).slice(8, -1)}//getoRawType ...

  5. 来了,超全MQTT实用示例

    Air201快速入门之MQTT示例 合宙Air201资产定位模组--是一个集成超低功耗4G通信.语音通话.超低功耗定位.计步.震动.Type-C.充电.放音.录音等功能的超小PCBA. 内部集成高效. ...

  6. 第二篇:低功耗模组Air724UG硬件设计手册

    ​  接着上篇,继续分享. 3.5 串口 模块提供了五个通用异步收发器:主串口 UART1.校准串口 UART2.通用串口 UART3.调试串口 HOST UART 和 ZSP UART. 3.5.1 ...

  7. 为政务单位免费提供IP地址https证书—JoySSL

    JoySSL作为知名的证书颁发机构(CA),确实为政务单位提供了IP地址HTTPS证书的免费测试证书服务.以下是对此服务的详细介绍: 一.证书类型与特点 证书类型:JoySSL为政务单位提供了专为IP ...

  8. sql注入--学习笔记_1

    实验室 sql sql可以对数据库进行访问和处理:取回数据,删除数据.web页面会使用这些. SQL 能做什么? SQL 面向数据库执行查询 SQL 可从数据库取回数据 SQL 可在数据库中插入新的记 ...

  9. (Python基础教程之二)在Sublime Editor中配置Python环境

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  10. Spring常见面试问题

    Spring 1.  Spring工作机制及为什么要用? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.Spring既是一个AOP框架,也是一IOC容器. SpringFra ...