事件对象
给当前元素的某个事件行为绑定方法,当事件行为触发,不仅会把绑定的方法执, 而且还会给方法默认传递一个实参,而这个实参就是事件对象。
let body = document.body;
/*
* 事件对象: 存储当前事件操作及触发的相关信息
* (浏览器本身记录的,记录的是当前操作的信息,和在哪个函数中无关)
* + 鼠标事件对象 MouseEvent
* + clientX/clientY 鼠标触发点距离窗口的X/Y坐标(不管当前触发点在第几屏)
* + pageX/pageY 鼠标触发点距离BODY的X/Y坐标
* + type 事件类型
* + target/srcEmelent 获取当前事件源(当前操作的元素)
* + path 传播路径
* + preventDefault() 【在Event.prototype上(ie6、7、8不兼容)】 / returnValue = false 阻止事件的默认行为
* + ev.stopPropagation() / ev.cancleBuddle 阻止冒泡传播
*/
let n = null;
body.addEventListener('click', function (ev) {
n = ev;
console.log(ev, 0)
})
body.addEventListener('click', function (ev) {
console.log(ev === n) // true
console.log(ev, 1)
})
/*
* 键盘事件对象 KeyboardEvent
+ type 事件类型
+ key / code 存储键名称
+ preventDefault() 【在Event.prototype上(ie6、7、8不兼容)】 / returnValue = false 阻止事件的默认行为
+ ev.stopPropagation() / ev.cancleBuddle 阻止冒泡传播
+ which/ keyCode 获取按键的键盘码 (MAC电脑上没有BackSpace delete是18)
+ 方向键 “左 37 上38 右 39 下40”
+ Space(空格) 32
+ BackSpace(回退) 8
+ Enter 13
+ Del 46
+ Shift 16
+ Ctrl 17
+ Alt 18
+ altKey 是否按下alt键(组合按键)
+ ctrlKey 是否按下ctrl键(组合按键)
+ shiftKey 是否按下shift键(组合按键)
*/
document.onkeydown = function(ev) {
console.log(ev)
}
/*
* 手指事件对象 TouchEvent
* 记录手指的信息,获取的结果都是TouchList集合,记录每一根手指的信息
* + changeTouches (常用) 手指按下、手指移动、离开屏幕都存储了对应的手指信息,
哪怕离开屏幕,存储的是最后依次手指在屏幕的的信息
* + touches: 缺少手指离开屏幕的信息
* + targetTouches 不常用
* + ev.changeTouches 第一根手指的信息
+ clientX / clientY
+ pageX / pageY
+ ....
*/
document.onTouchStart = function (ev) {
console.log(ev)
}
/*
* Event 普通事件对象
*/
window.onload = function (ev) {
console.log(ev) //普通事件对象
}
浏览器的默认行为: 浏览器会赋予元素很多默认的行为操作
-
鼠标右击菜单;
-
点击A标签实现页面的跳转
-
部分浏览器会记录输入记录,在下次输入的时候有模糊匹配
-
键盘按下会输入内容
-
...
可以基于ev.preventDefault() 来阻止默认这些默认行为
window.onContextMenu = function (ev) {
// 组织默认行为: 禁用自带的右键菜单
ev.preventDefault();
}
A标签的默认行为:1)页面跳转; 2) 锚点定位(定位到当前页面中指定ID的位置,url地址中会加入HASH值)
// 方案一:
<a href='javascript:;' id='link'></a>
// 方案二:
<scritp>
link.onclick = function (ev) {
// 阻止默认行为
ev.preventDefault();
// 或者 return false
}
</scritp>