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