1.事件对象

    Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

  • 什么时候会产生Event 对象呢?

    • 例如: 当用户单击某个元素的时候,我们给这个元素注册的事件就会触发,该事件的本质就是一个函数,而该函数的形参接收一个event对象.
  • 事件通常与函数结合使用,函数不会在事件发生前被执行!

使用场景即:

var oDIv = document.getElementById('box');oDiv.onclick = function(event){.........
}

2.事件流

2.1事件流发展史

见:http://www.cnblogs.com/rubylouvre/archive/2010/04/27/1721988.html

2.2冒泡(由下到上)

意思就是说,假如用户单击了一个元素,该元素拥有一个click事件,那么同样的事件也将会被它的祖先触发,这个事件从该元素开始一直冒泡到DOM树的最上层,这一过程称为事件冒泡

2.3捕获(由上到下)

事件捕获和事件冒泡是相反的,也就是说,当用户触发了一个事件的时候,这个事件是从DOM树的最上层开始触发一直到捕获到事件源.

2.4事件流的写法以及实现方式

  • 标准实现方式使用关键词addEventListener,假如你想要给某一个元素添加事件,现在就可以这样写element.addEventListener(eventType, fn, false)

    • dom对象.addEventListener(事件类型, 回调函数, 事件机制)这里的事件类型表示你要使用哪种事件类型比如click, 回调函数里面写着触发此事件你要做什么事情, 事件机制分为冒泡和捕获,如果为false表示事件冒泡,为true表示事件捕获

    IE写法:

  • dom对象.attachEvent(eventType, fn)第一个参数表示事件类型,第二个是回调.这种写法兼容IE, IE没有实现事件捕获,

3.关于event对象

  • 在触发的事件的函数里面我们会接收到一个event对象,通过该对象我们需要的一些参数,比如说我们需要知道此事件作用到谁身上了,就可以通过event的属性target来获取到(IE暂且不谈),或者想阻止浏览器的默认行为可以通过方法preventDefault()来进行阻止.以下是event对象的一些属性和方法
属性 描述
altKey 返回当事件被触发时,”ALT” 是否被按下。
button 返回当事件被触发时,哪个鼠标按钮被点击。
clientX 返回当事件被触发时,鼠标指针的水平坐标。
clientY 返回当事件被触发时,鼠标指针的垂直坐标。
ctrlKey 返回当事件被触发时,”CTRL” 键是否被按下。
metaKey 返回当事件被触发时,”meta” 键是否被按下。
relatedTarget 返回与事件的目标节点相关的节点。
screenX 返回当某个事件被触发时,鼠标指针的水平坐标。
screenY 返回当某个事件被触发时,鼠标指针的垂直坐标。
shiftKey 返回当事件被触发时,”SHIFT” 键是否被按下。
  • IE 属性(除了上面的鼠标/事件属性,IE 浏览器还支持下面的属性)
属性 描述
cancelBubble 如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true。
fromElement 对于 mouseover 和 mouseout 事件,fromElement 引用移出鼠标的元素。
keyCode 对于 keypress 事件,该属性声明了被敲击的键生成的 Unicode 字符码。对于 keydown 和 keyup
offsetX,offsetY 发生事件的地点在事件源元素的坐标系统中的 x 坐标和 y 坐标。
returnValue 如果设置了该属性,它的值比事件句柄的返回值优先级高。把这个属性设置为
srcElement 对于生成事件的 Window 对象、Document 对象或 Element 对象的引用。
toElement 对于 mouseover 和 mouseout 事件,该属性引用移入鼠标的元素。
x,y 事件发生的位置的 x 坐标和 y 坐标,它们相对于用CSS动态定位的最内层包容元素。
  • 标准 Event 属性 下面列出了 2 级 DOM 事件标准定义的属性
属性和方法 描述
bubbles 返回布尔值,指示事件是否是起泡事件类型。
cancelable 返回布尔值,指示事件是否可拥可取消的默认动作。
currentTarget 返回其事件监听器触发该事件的元素。
eventPhase 返回事件传播的当前阶段。
target 返回触发此事件的元素(事件的目标节点)。
timeStamp 返回事件生成的日期和时间。
type 返回当前 Event 对象表示的事件的名称。
initEvent() 初始化新创建的 Event 对象的属性。
preventDefault() 通知浏览器不要执行与事件关联的默认动作。
stopPropagation() 不再派发事件。

4.Event对象的一些兼容写法

获得event对象兼容性写法
event || (event = window.event);
获得target兼容型写法
event.target||event.srcElement
阻止浏览器默认行为兼容性写法
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
阻止冒泡写法
event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);

事件绑定和取消事件绑定方法的形式

//事件绑定function on(dom, eventType, fn) {if(dom.addEventListener) {dom.addEventListener(eventType, fn);} else {if(dom.attachEvent) {dom.attachEvent('on' + eventType, fn);}
}
//取消事件绑定
function un(dom, eventType, fn) {if(dom.removeEventListener) {dom.removeEventListener(eventType, fn, false);} else {if(dom.detachEvent) {dom.detachEvent("on" + eventType, fn)}}}

 5.事件冒泡和事件捕获demo

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>bubble event</title><style type="text/css">body{margin:0;}#one{width:500px;height:500px;background:rgb(255,0,0);border: 1px solid transparent;}#two{width:400px;height:400px;margin: 0 auto;margin-top: 50px;background:rgb(255,50,50);border: 1px solid transparent;}#three{width:300px;height:300px;margin: 0 auto;margin-top: 50px;background:rgb(255,100,100);border: 1px solid transparent;}#four{width:200px;height:200px;margin: 0 auto;margin-top: 50px;background:rgb(255,150,150);}</style>
</head>
<body><div id='one'><div id='two'><div id='three'><div id='four'></div></div></div></div><script>var one = document.getElementById('one');var two = document.getElementById('two');var three = document.getElementById('three');var four = document.getElementById('four');var useCapture = false; //false为冒泡获取【目标元素先触发】    true为捕获获取【父级元素先触发】
        one.addEventListener('click', function(event) {event || (event = window.event);console.log(event);console.log('one');}, useCapture);two.addEventListener('click', function() {console.log('two');}, useCapture);three.addEventListener('click', function() {console.log('three');}, useCapture);four.addEventListener('click', function() {console.log('four');}, useCapture);     /*false冒泡点击four div输出结果:four three two one        true捕获点击four div输出结果: one two three four*/</script>
</body>
</html>

参考资料:https://www.cnblogs.com/songyaqi/p/5204143.html

作者:smile.轉角

QQ:493177502

转载于:https://www.cnblogs.com/websmile/p/8807334.html

【js】event(事件对象)详解相关推荐

  1. js-event(事件对象)详解

    1.事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什么时候会产生Event 对象呢?  例如:当用户单击某个元素的时候,我们给这个元 ...

  2. javascript中window.event事件用法详解

    前两天写程序时因为要用到javascript中的window.event事件,于是就在网上搜了一下,终于找到一篇不错的文章,来与大家分享下:  描述   event代表事件的状态,例如触发event对 ...

  3. JS中window.event事件使用详解

    一.描述 event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等. event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有意义.比如:from ...

  4. JS event使用方法详解

    event的某些属性只对特定的事件有意义.比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义. 下面的例子检查鼠标是否在链接上 ...

  5. event事件坐标详解(clientx, offsetx, screenX等)

    鼠标事件(e=e||window.event) event.clientX.event.clientY    (相对浏览器窗口) //鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包 ...

  6. JS中的event 对象详解

    JS中的event 对象详解 JS的event对象 Event属性和方法: 1. type:事件的类型,如onlick中的click: 2. srcElement/target:事件源,就是发生事件的 ...

  7. JS Event对象详解

    JS Event对象详解 参考资料: js添加事件和移除事件:addEventListener()与removeEventListener() Event 对象 Event 对象代表事件的状态,比如事 ...

  8. JavaScript(js)事件冒泡、事件捕获、事件委托详解

    JavaScript(js)事件冒泡.事件捕获.事件委托详解 1.什么是事件 JavaScript和HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口发生的一些特定的交互瞬间.可以使用监听 ...

  9. html内置时间对象,JavaScript中的常用事件,以及内置对象详解

    原标题:JavaScript中的常用事件,以及内置对象详解 今天是刘小爱自学Java的第81天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 学前端有一个非常权威的组织,也就是w3c,其有个专 ...

最新文章

  1. python3.6.2怎样安装,python 3.6.2 安装配置方法图文教程
  2. Git 创建两个“本地分支”协同工作
  3. 网络推广外包“重拳出击”中小企业网站优化力求超越网络推广外包行业站
  4. LeetCode 153. Find Minimum in Rotated Sorted Array (在旋转有序数组中找到最小值)
  5. 正则表达式的基本语法
  6. request.setAttribute()与request.getAttribute()取值问题
  7. java学习心得与体会(自我鼓励)
  8. 苹果mac系统在文件栏添加文件夹的方法
  9. BAT领衔,云计算厂商群雄逐鹿,谁才是云时代的安全之王
  10. Shell替换数组元素之间的间隔符号
  11. 深圳一AI公司人脸数据泄露,超256万用户敏感信息在“裸奔”!
  12. 【“Unfortunately,app has stoped”问题与解决】
  13. 如何恢复录音删除的录音文件_硬盘分区数据误删除如何恢复?文件删除不用急...
  14. unity 判断路径是否存在或者文件夹是否存在
  15. Excel表格中替换的高级用法
  16. 国家电网公司推进信息化工程综述
  17. 中国大学MOOC-陈越、何钦铭-数据结构-2019夏期末考试
  18. rhel6.8 oracle11g,RHEL6.8 Oracle RAC 11g R2 ASM磁盘在线扩容
  19. 单片机原理与实践学习记录之51单片机I/O口简单应用
  20. 修改/etc/profile导致命令无法使用的处理办法

热门文章

  1. centos安装过程中gpt报错解决方案
  2. Uva_11235_Frequent values
  3. 《C++程序设计语言(特别版)》——忠告
  4. Ural_1586. Threeprime Numbers (DP)
  5. MySQL的隔离级别
  6. 是什么构成了“人工智能”热潮?
  7. 2017年网络犯罪现状分析报告
  8. centos7 常用命令参考
  9. CVSNT Manual
  10. DeepEarth自定义图元的中心位置纠偏