美文网首页
2019-01-25

2019-01-25

作者: kathyever | 来源:发表于2019-01-25 16:44 被阅读0次

    13.6 模拟事件

    可以使用Javascript在任意时刻来触发特定的事件,而此时的事件就如同浏览器创建的事件一样。
    也就是说,这些事件该冒泡还是会冒泡,而且照样能够导致浏览器执行已经制定的处理它们的事件处理程序。

    13.6.1 DOM中的事件模拟

    可以在document对象上使用createEvent()方法创建event对象。
    这个方法接收一个参数,即表示要创建的事件类型的字符串。在DOM2级中,所有这些字符串都使用英文复数形式,而在DOM3级中都变成了单数。这个字符串可以是下列几字符串之一。

    ◆ UIEvents:一般化的UI事件。鼠标事件和键盘事件都继承自UI事件。DOM3级中是UIEvent。
    ◆ MouseEvents:一般化的鼠标事件。DOM3级中时MutationEvent
    ◆ MutationEvents:一般化的DOM变动事件。DOM3级中时MutationEvent
    ◆ HTMLEvents:一般化的HTML事件。没有对应的DOM3级事件

    1)模拟鼠标事件
    创建鼠标事件对象的方法是为createEvent()传入字符串“MouseEvents”。返回的对象有一个名为initMouseEvent()方法,用于指定与该鼠标事件有关的信息。

    2)模拟键盘事件
    DOM3级规定,调用createEvent()并传入“KeyboardEvent”就可以创建一个键盘事件。返回的事件对象会包含一个initKeyEvent()方法。

    3)模拟其他事件
    虽然鼠标事件和键盘事件是在浏览器中最经常模拟的时间,但有时候同样需要模拟变动事件和HTML事件。
    要模拟变动事件,可以使用createEvent(“MutationEvents”)创建一个包含initMutationEvent()方法的变动事件对象。
    这个方法接收到 参数包括:type、bubbles、cancelabel、relatedNode、preValue、newValue、attrName和attrChange。

    4)自定义DOM事件

    DOM3级还定义了“自定义事件”。自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件。要创建新的自定义事件,可以调用createEvent(“CustomEvent”)。返回的对象有一个名为initCustomEvent()的方法,接受下面4个参数:
    ◆ type(字符串):触发的事件类型,例如“keydown”
    ◆ bubbles(布尔值):表示事件是否应该冒泡
    ◆ cancelable(布尔值):表示事件是否可以取消
    ◆ detail(对象):任意值,保存在event对象的detail属性中

    13.6.2 IE中的事件模拟

    在IE8及之前版本中模拟事件与在DOM中模拟事件的思路相似:先创建event对象,然后为其指定相应的信息,然后再使用该对象来触发事件。
    调用document.createEventObject()方法可以在IE中创建event对象。但与DOM方式不同的是,这个方法不接受参数,结果会返回一个通用的event对象。然后手工为这个对象添加所有必要的信息。最后就是在目标上调用fireEvent()方法,这个方法接受两个参数:事件处理程序的名称和event对象。
    在调用fireEvent()方法时,会自动为event对象添加srcElement和type属性;其他属性则都是必须通过手工添加的。

    13.7 小结

    事件是将JavaScript与网页联系在一起的主要方式。“DOM3级事件”规范和HTML5定义了常见的大多数事件。即使有规范定义了基本事件,但很多浏览器仍然在规范之外实现了自己的专有事件,从而为开发人员提供更多掌握用户交互的手段。

    在使用事件时,需要考虑如下一些内存与性能方面的问题:
    ◆ 有必要限制一个页面中事件处理程序的数量,数量太多会导致占用大量内存,而且也会让用户感觉页面反应不够灵敏。
    ◆ 建立在事件冒泡机制智商的事件委托技术,可以有效的减少事件处理程序的数量
    ◆ 建议在浏览器卸载页面之前移除页面中的所有事件处理程序。

    相关文章

      网友评论

          本文标题:2019-01-25

          本文链接:https://www.haomeiwen.com/subject/cwfmjqtx.html