事件对象?

186 阅读3分钟

事件对象

我们给当前的行为绑定了一个函数,我们一去执行这个行为,我们一去执行这个行为会去自动的执行这个函数,只要是执行了这个函数,就会给这个函数默认传一个参数,这个参数就叫做事件对象,这个事件对象记录了触发事件一瞬间的信息
MouseEvent 鼠标事件对象
keyboardEvent 键盘事件对象

同一个事件行为绑定的一个函数,每一次触发事件行为执行这个函数传的事件对象都是不一样的

当点击box的时候也会同时触发body的onclick的事件行为,点一下,浏览器只会得到一个事件对象,把同一个事件对象传给了两个函数,此时就点击了一下,只有一个鼠标,浏览器只会得到一个事件对象,只不过是将同一个事件对象分别传给了两个函数
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="box">点我</div>
<script>
var box=document.getElementById('box');
    box.onclick=function(e){
        console.log(e);//MouseEvent {isTrusted: true, screenX: 38, screenY: 87, clientX: 38, clientY: 21, …}
    }
</script>
</body>
</html>

事件对象下面的一些属性

//e:mouseEvent 鼠标事件对象
e.clientX//记录当前点击的那一瞬间鼠标距离屏幕左边的距离
e.clientY//记录当前点击的那一瞬间鼠标距离屏幕左边的距离
//pageX,pageY有兼容性,低版本浏览器下面没有pageX和pageY属性
e.pageX//记录当前点击的那一瞬间鼠标距离整个网页左边的距离
e.pageY//记录当前点击那一瞬间鼠标距离整个网页上边的距离
e.target//事件源,当前触发事件的元素
e.type//事件类型 DOM2级事件绑定的第一个参数

处理兼容(IE低版本浏览器中没有这些属性,所以要处理一下兼容)

事件对象e

1.低版本浏览器下,没有事件e这个事件对象,在低版本浏览器下不会默认传参数,形参位置的e就是undefined,低版本浏览器下事件对象就要用window.event

低版本浏览器中也没有e.target属性

2.e.srcElement //事件源:window.event.srcElement

我点box的时候由于事件冒泡,也会触发body执行
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="box">点我</div>
<script>
    var box=document.getElementById('box');
    box.onclick=function(e){//点的是box,此处的事件源是srcElement
        //box触发的事件对象和body的触发的事件对象是一样的
        console.log(e);//MouseEvent {isTrusted: true, screenX: 38, screenY: 87, clientX: 38, clientY: 21, …}
    }

    document.body.onclick=function(e){//点的是box,此处的事件源也是srcElement
        //box触发的事件对象和body的触发的事件对象是一样的
        //当点击box的时候也会触发body的onclick,事件源是box
        console.log(e);
    }
</script>
</body>
</html>
总结:鼠标只有一个,然后只点了一下,点的位置也是同一个,浏览器把事件对象同时传给了两个函数当形参,这个两个事件对象是同一个事件对象

给谁绑的跟事件源有关系嘛?

操作的哪个元素,事件源就是什么