四时宝库

程序员的知识宝库

JS-事件与事件流(js事件机制)

事件

JS与页面之间的交互是通过事件来实现的。事件就是浏览器发生一些特殊的交互瞬间,事件最早是用来分担服务器负载的一种手段,从早期的DOM0、DOM2到后期的DOM3事件。

  • DOM0
DOM1事件的特点
- 直接绑定到html上的事件
- 给事件赋null,即可清除事件
- 绑定多个函数的情况下,后一个事件会覆盖前一个事件
- 不存在兼容性问题
  • DOM2
DOM2事件的特点
- 通过 addEventListener(a,b,c) 绑定的事件,可以修改c的值来觉得该事件是否冒泡
- 可以同时存在多个函数,链式执行
- removeEventListener清楚事件
  • DOM3
DOM3新增事件
UI事件
- load 页面加载完毕
- unload 卸载后触发
- abort 停止加载)
- error Js发生错误时触发
- select 文本框选择触发
- resize 页面窗口变化
- scroll 页面滚动式触发
焦点事件
- onfocus:获取焦点
- onblur:失去焦点
鼠标事件
- onmousedown 鼠标按下事件
- onmousemove 鼠标移动事件
- onmouseout 鼠标移出事件
- onmouseover 鼠标指针移动到元素(被选元素或其子元素)上时触发常与onmouseout一起用
- onmousenter 只有在鼠标指针穿过被选元素时,才会触发,常与onmouseleave一起使用
- onmouseleave 鼠标移出事件
- onmouseup 鼠标抬起事件
- onclick 单击事件(相继触发mousedown与mouseup事件)
- ondbclick 双击事件
滚轮事件
- onmousewheel 通常浏览器使用
- DOMMouseScroll FireFox浏览器使用
文本事件
当在文档中输入文本时触发
键盘事件
- keydown 按下键盘
- keypress 按住键盘
- keyup 松开键盘
合成事件
- compositionstart 开始输入
- compositionupdate 输入中
- compositionend 输入完成
变动事件(DOM发生变化时触发)
- DOMNodeInserted 一个节点被插入到另一个节点中
- DOMNodeRemoved 在节点从其父节点中被移除时
- DOMNodeInsertedIntoDocument 在一个节点被直接插入文档,或通过子树间接插入文档之后触发。这个事件在DOMNodeInserted之后触发
- DOMNodeRemovedFromDocument 在一个节点被直接从文档中移除,或通过子树间接从文档中移除之前触发。这个事件在DOMNodeRemoved之后触发
- DOMSubtreeModified 在DOM结构中发生任何变化时触发
- DOMAttrModified 在特性被修改之后触发
- DOMCharacterDataModified 在文本节点的值发声变化时触发
  • 其他

在移动设备由于上没有鼠标,所以在这些设备上开发比较不同。

面向Safari开发时的注意事项:

  • 不支持dblclick事件
  • 轻击单机元素触发mousemove事件
  • mousemove 事件也会触发 mouseover 和 mouseout 事件。
  • 两个手指放在屏幕上且页面随手指移动而滚动时会触发 mousewheel 和 scroll 事件。

事件对象

Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。事件通常与函数结合使用,函数不会在事件发生前被执行

事件流

事件流描述的是从页面中接受事件的顺序,但有意思的是,微软(IE)和网景(Netscape)开发团队居然提出了两个截然相反的事件流概念,IE的事件流是事件冒泡流(event bubbling),而Netscape的事件流是事件捕获流(event capturing)

  • DOM事件流三个阶段的执行顺序
首先发生的事件捕获,然后是目标接受事件,最后是事件冒泡阶段
  • 事件流概述
阻止冒泡
w3c的方法是e.stopPropagation()
IE则是使用e.cancelBubble = true
阻止默认事件
w3c的方法是e.preventDefault()
IE则是使用e.returnValue = false
事件的目标
e.target
事件处理程序当前正在处理事件的那个元素(始终等于this)
e.currentTarget

补充

在发生 keydown 和 keyup 事件时,event 对象的 keyCode 属性中会包含一个代码,与键盘上一 个特定的键对应。对数字字母字符键,keyCode 属性的值与 ASCII 码中对应小写字母或数字的编码相同。

DOM3新增textInput 事件,当用户在可编辑区域中输入字符时,就会触发这个事件。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接