大家好,我是皮皮。前言我们知道很多编程语言都有事件的概念,JavaScript中也存在事件。原因也很简单。我们知道HTML是页面结构层,相当于人体骨骼;CSS是样式层,相当于人的外表;但是它是静态的,人要能动能动,所以就产生了JavaScript;JavaScript用于控制页面元素,产生与用户的动态交互效果,构成了今天丰富多样的界面。今天我们就来了解一下js中的事件;1.事件相关的概念事件:指用户的鼠标动作和键盘动作,文档的加载和卸载,事件被封装成一个事件对象,包含了事件发生时所有相关事件的信息(事件的属性)以及可以对事件执行的操作(事件的方法)。比如点击页面上的一个按钮,产生的事件对象如下:上面可以看到是一个MouseEvent对象,里面包含了一系列的属性,比如鼠标点击的位置。window.onload监听函数中打印键盘按下时产生的事件对象,如下:注意:Event类是MouseEvent和KeyboardEvent的父类;2、事件对象的常用属性和方法2.1事件定位相关属性MouseEvent对象中的属性,很多带有X/Y的,都是与事件的位置相关的。具体包括:x/y、clientX/clientY、pageX/pageY、screenX/screenY、layerX/layerY、offsetX/offsetY六对;之所以有这么多,是因为浏览器厂商在版本变更时存在很多不一致的地方:以移动鼠标为例:x属性Y属性函数xY离浏览器左/上可视区域的距离(除了工具栏区域);clientXclientY距浏览器左/上可视区域(工具栏区域除外)的距离(同上);screenXscreenY是距电脑显示器左/上的距离,拖动浏览器窗口位置可以看到变化;offsetXoffsetY是距具有定位属性的父元素左/上的距离;(不算边框)pageXpageY是距离页面左边/顶部的距离,它和clientX/clientY的区别是不随着滚动条的位置而改变;layerXlayerY是离有定位属性的父元素left/top的距离(计算边框);之所以有这么多值是相同的,在这种情况下,是因为浏览器的兼容性。不同属性的浏览器兼容性如下;(+支持,-不支持)浏览器offsetX/offsetYx/ylayerX/layerYpageX/pageYclientX/clientYscreenX/screenYW3C----++IE++--++Firefox--++++Opera++-+++Safari++++++chrome+++++说明:详情请咨询参考https://www.caniuse.com/2.2其他常用属性target:事件发生的节点;currentTarget:当前正在处理的事件的节点,在事件捕获或冒泡阶段;timeStamp:事件发生的时间,timestampbubbles:事件是否冒泡。cancelable:事件是否可以使用preventDefault()方法取消默认动作;keyCode:按下的键的值;2.3事件对象方法event。preventDefault():阻止元素的默认行为,如链接跳转,表单提交;event.stopPropagation():阻止事件冒泡;event.initEvent():初始化新事件对象的属性,会使用自定义事件,不常用;event.stopImmediatePropagation():可以防止同一事件的其他优先级较低的监听器的处理,很少使用;3.事件的三种模型3.1原始事件模型(DOM0层)在原始事件模型中,没有事件发生后传播的概念,也没有事件流。一旦发生事故,立即处理。监听器函数只是元素的一个属性值,通过指定元素的属性值来绑定监听器。有两种写法:在HTML代码中指定属性值:
