JS addEventListener() 方法

说明:

addEventListener() 方法用于向指定元素添加监听事件。且同一元素目标可重复添加,不会覆盖之前相同事件,配合 removeEventListener() 方法来移除事件。

语法

document.getElementById(元素id).addEventListener("click", function(){
    console.log("目标元素被点击了");
});

参数说明:有三个参数

参数一、事件名称,字符串,必填。

  • 事件名称不用带 "on" 前缀,点击事件直接写:"click",键盘放开事件写:"keyup"

参数二、执行函数,必填。

  • 填写需要执行的函数,如:function(){代码...} 
  • 当目标对象事件触发时,会传入一个事件参数,参数名称可自定义,如填写event,不需要也可不填写。 事件对象的类型取决于特定的事件。例如, “click” 事件属于 MouseEvent(鼠标事件) 对象。
  • function(event){console.log(event)}

参数三、触发类型,布尔型,可空 

  • true - 事件在捕获阶段执行
  • false - 事件在冒泡阶段执行,默认是false

你可以使用函数名,来引用外部函数:

element.addEventListener("click", function(){ alert("Hello World!"); });
element.addEventListener("click", myFunction);
 
function myFunction() {
    alert ("Hello World!");
}

向 Window 对象添加事件句柄

window.addEventListener("resize", function(){
    document.getElementById("demo").innerHTML = sometext;
});

传递参数

当传递参数值时,使用"匿名函数"调用带参数的函数:

var p1 = 5;
var p2 = 7;
document.getElementById("myBtn").addEventListener("click", function() {
    myFunction(p1, p2);
});
function myFunction(a, b) {
    var result = a * b;
    document.getElementById("demo").innerHTML = result;
}

事件冒泡或事件捕获?

事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将<p>元素插入到<div>元素中,用户点击<p>元素, 哪个元素的 "click" 事件先被触发呢?

冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即:<p>元素的点击事件先触发,然后会触发<div>元素的点击事件。

捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即:<div>元素的点击事件先触发 ,然后再触发<p>元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

addEventListener( event, function, useCapture);
默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递

document.getElementById("myDiv").addEventListener("click", myFunction, true);

removeEventListener() 方法

removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

element.removeEventListener("mousemove", myFunction);

浏览器兼容处理

var x = document.getElementById("myBtn");
if (x.addEventListener) {                    // 所有主流浏览器,除了 IE 8 及更早版本
    x.addEventListener("click", myFunction);
} else if (x.attachEvent) {                  // IE 8 及更早版本
    x.attachEvent("onclick", myFunction);
}

IE 8 及更早 IE 版本,Opera 7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。但是,对于这类浏览器版本可以使用 detachEvent() 方法来移除事件句柄:

element.attachEvent(event, function);
element.detachEvent(event, function);

参数一的事件类型大致有如下选择(转载)

鼠标事件

  • click 当用户点击某个对象时调用的事件句柄。
  • contextmenu 在用户点击鼠标右键打开上下文菜单时触发
  • dblclick 当用户双击某个对象时调用的事件句柄。
  • mousedown 鼠标按钮被按下。
  • mouseenter 当鼠标指针移动到元素上时触发。
  • mouseleave 当鼠标指针移出元素时触发
  • mousemove 鼠标被移动。
  • mouseover 鼠标移到某元素之上。
  • mouseout 鼠标从某元素移开。
  • mouseup 鼠标按键被松开。

键盘事件

  • keydown 某个键盘按键被按下。
  • keypress 某个键盘按键被按下并松开。
  • keyup 某个键盘按键被松开。

框架/对象(Frame/Object)事件

  • abort 图像的加载被中断。 ( )
  • beforeunload 该事件在即将离开页面(刷新或关闭)时触发
  • error 在加载文档或图像时发生错误。 ( , 和 )
  • hashchange 该事件在当前 URL 的锚部分发生修改时触发。
  • load 一张页面或一幅图像完成加载。
  • pageshow 该事件在用户访问页面时触发
  • pagehide 该事件在用户离开当前网页跳转到另外一个页面时触发
  • resize 窗口或框架被重新调整大小。
  • scroll 当文档被滚动时发生的事件。
  • unload 用户退出页面。 ( 和 )

表单事件

  • blur 元素失去焦点时触发
  • change 该事件在表单元素的内容改变时触发( , , , 和 )
  • focus 元素获取焦点时触发
  • focusin 元素即将获取焦点是触发
  • focusout 元素即将失去焦点是触发
  • input 元素获取用户输入是触发
  • reset 表单重置时触发
  • search 用户向搜索域输入文本时触发 (

剪贴板事件

  • copy 该事件在用户拷贝元素内容时触发
  • cut 该事件在用户剪切元素内容时触发
  • paste 该事件在用户粘贴元素内容时触发

打印事件

  • afterprint 该事件在页面已经开始打印,或者打印窗口已经关闭时触发
  • beforeprint 该事件在页面即将开始打印时触发

拖动事件

  • drag 该事件在元素正在拖动时触发
  • dragend 该事件在用户完成元素的拖动时触发
  • dragenter 该事件在拖动的元素进入放置目标时触发
  • dragleave 该事件在拖动元素离开放置目标时触发
  • dragover 该事件在拖动元素在放置目标上时触发
  • dragstart 该事件在用户开始拖动元素时触发
  • drop 该事件在拖动元素放置在目标区域时触发

多媒体(Media)事件

  • abort 事件在视频/音频(audio/video)终止加载时触发。
  • canplay 事件在用户可以开始播放视频/音频(audio/video)时触发。
  • canplaythrough 事件在视频/音频(audio/video)可以正常播放且无需停顿和缓冲时触发。
  • durationchange 事件在视频/音频(audio/video)的时长发生变化时触发。
  • emptied The event occurs when the current playlist is empty
  • ended 事件在视频/音频(audio/video)播放结束时触发。
  • error 事件在视频/音频(audio/video)数据加载期间发生错误时触发。
  • loadeddata 事件在浏览器加载视频/音频(audio/video)当前帧时触发触发。
  • loadedmetadata 事件在指定视频/音频(audio/video)的元数据加载后触发。
  • loadstart 事件在浏览器开始寻找指定视频/音频(audio/video)触发。
  • pause 事件在视频/音频(audio/video)暂停时触发。
  • play 事件在视频/音频(audio/video)开始播放时触发。
  • playing 事件在视频/音频(audio/video)暂停或者在缓冲后准备重新开始播放时触发。
  • progress 事件在浏览器下载指定的视频/音频(audio/video)时触发。
  • ratechange 事件在视频/音频(audio/video)的播放速度发送改变时触发。
  • seeked 事件在用户重新定位视频/音频(audio/video)的播放位置后触发。
  • seeking 事件在用户开始重新定位视频/音频(audio/video)时触发。
  • stalled 事件在浏览器获取媒体数据,但媒体数据不可用时触发。
  • suspend 事件在浏览器读取媒体数据中止时触发。
  • timeupdate 事件在当前的播放位置发送改变时触发。
  • volumechange 事件在音量发生改变时触发。
  • waiting 事件在视频由于要播放下一帧而需要缓冲时触发。

动画事件

  • animationend 该事件在 CSS 动画结束播放时触发
  • animationiteration 该事件在 CSS 动画重复播放时触发
  • animationstart 该事件在 CSS 动画开始播放时触发

过渡事件

  • transitionend 该事件在 CSS 完成过渡后触发。

其他事件

  • message 该事件通过或者从对象(WebSocket, Web Worker, Event Source 或者子 frame 或父窗口)接收到消息时触发
  • online 该事件在浏览器开始在线工作时触发。
  • offline 该事件在浏览器开始离线工作时触发。
  • popstate 该事件在窗口的浏览历史(history 对象)发生改变时触发。 event occurs when the window’s history changes
  • show 该事件当

元素在上下文菜单显示时触发

  • storage 该事件在 Web Storage(HTML 5 Web 存储)更新时触发
  • toggle 该事件在用户打开或关闭 元素时触发
  • wheel 该事件在鼠标滚轮在元素上下滚动时触发

本资源由随笔博客发布。发布者:五维国度,转载请注明出处:http://blog.suibi.site/archives/4139


本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

(1)
上一篇 2022年 11月 4日 下午4:15
下一篇 2022年 11月 8日 下午4:52

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

在线咨询: QQ交谈

邮件:jctestxcx@163.com

关注微信