前端基础知识小结

 主页   资讯   文章   代码   电子书 

事件

事件流

事件流描述的是从页面中接收事件的顺序。有冒泡和捕获两种。“DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。

事件处理程序

HTML事件处理程序 缺点有1,可能事件处理程序还未初始化就被触发了 2. 这样扩展事件处理程序的作用域链在不同浏览器中会导致不同结果。不同JavaScript引擎遵循的标识符解析规则略有差异,很可能会在访问非限定对象成员时出错。3.HTML和js代码紧耦合

DOM0级事件处理程序

DOM2级事件处理程序 addEventListener 三个参数,最后一个参数默认为false表示在冒泡阶段调用事件处理程序,主要好处是可以添加多个事件处理程序。removeEventListener()移除,事件处理函数必须相同(匿名函数就不可以了)

IE事件处理函数:attachEvent()和detachEvent()

事件对象

DOM事件对象的属性有:bubbles,cancelable,currentTarget,target,defaultPrevented,detail,eventPhase,trusted,type,view

方法有:preventDefault(),stopImmediatePropagation(),stopPropagation()

以上都是只读的。在事件处理程序内部,对象this 始终等于currentTarget 的值,而target 则只包含事件的实际目标。

而IE有cancelBubble,returnValue,srcElement和type属性。

事件类型

UI事件:load,unload,abort,error,select,resize,scroll

焦点事件:blur,focus,focusin,focusout,前两个不冒泡,后两个冒泡

鼠标和滚轮事件:

  • click,dblclick,mousedown,mouseenter,mouseleave,mousemove,mouseout,mouseover,mouseup,

  • 相关位置信息有客户区坐标位置事件对象的clientX 和clientY 属性(相对视口),页面坐标通过事件对象的pageX 和pageY 属性(相对页面),屏幕坐标位置screenX 和screenY 属性(相对整个屏幕)

  • 修改键属性,shiftKey,ctrlKey,altKey,metaKey,是否同时按下这些键

  • 按下哪个鼠标键:button属性

  • 滚轮事件:mousewheel事件,wheelDelta 属性(向上它是120的倍数,向下它是-120倍数),而Firfox是DOMMouseScroll事件,detail 属性,向前滚动鼠标滚轮时,是-3 的倍数,当向后滚动鼠标滚轮时,这个属性的值是3 的倍数

  • 触摸设备:不支持dblclick事件,mousemove 事件也会触发mouseover 和mouseout 事件,两个手指放在屏幕上且页面随手指移动而滚动时会触发mousewheel 和scroll 事件

键盘与文本事件:keydown,keypress,keyup,相关属性keyCode,事件textInput(只有可编辑区域可触发,只会在用户按下能够输入实际字符的键时才会被触发,其他同keypress) HTML5事件:contextmenu(自定义menu),beforeunload,DOMContentLoaded(形成完整DOM树后触发),readystatechange,pageshow 和pagehide,hashchange 设备事件:orientationchange,deviceorientation,devicemotion

触摸和手势事件:touchstart,touchmove,touchend,touchcancel,除了鼠标事件中的常用属性,还有属性touches:表示当前跟踪的触摸操作的Touch 对象的数组,targetTouchs:特定于事件目标的Touch 对象的数组,changeTouches:表示自上次触摸以来发生了什么改变的Touch 对象的数组。手势事件:gesturestart,gesturechange,gestureend

内存和性能

事件委托:http:\/\/leafxm.com\/2016\/05\/07\/js_delegate\/

移除事件处理程序:移除DOM元素前应先移除它相关的事件,通过事件委托可以避免这个问题,或使用onunload 事件处理程序移除所有事件处理程序。