zoukankan      html  css  js  c++  java
  • 事件

    相关代码已放在我的Github:https://github.com/kisscancer/cnblogs.com-ch11ry/tree/master/Event

    一.DOM事件流(三个阶段):

    • 事件捕获阶段
    • 处于目标阶段(被看作是事件冒泡阶段的一部分)
    • 事件冒泡阶段

    // TODO:代码示例1

     

    二.添加事件的方法:

    • HTML中添加事件处理程序(<a onclick="clickEvent()">示例</a>)
    • DOM0级事件处理程序。即用js先获取元素,再给元素赋值具体的事件;解除事件时,将对应事件置为null即可。缺点:只能给对应事件绑定一个处理函数
    • DOM2级事件处理程序。使用addEventListener/removeEvenrListener方法。优点:可以绑定多个处理函数
    • IE8及之前需要使用attachEvent/detachEvent

    // TODO:代码示例2

     

    三.DOM中的event对象

    • type(String):表示的事件类型。如“click”、“dblclick”
    • bubbles(Boolean):表示是否冒泡
    • cancelable(Boolean):表示是否可以取消事件的默认行为
    • currentTarget(Element):事件处理程序当前正在处理的那个元素(注册事件的那个元素,例如点击了一个button,但是事件注册在body上,那么target为body)
    • defaultPrevented(Boolean):为true时,表示已经调用了event.preventDefault()方法
    • detail(Integer):与事件相关的细节信息
    • eventPhase(Integer):调用事件处理程序的阶段: 1表示捕获阶段, 2表示“处于目标”, 3表示冒泡阶段
    • preventDefault()(Function):取 消 事 件 的 默 认 行 为 。 如 果 cancelable是true,则可以使用这个方法
    • stopImmediatePropagation()(Function):取消事件的进一步捕获或冒泡,同时阻止任何事件处理程序被调用(DOM3级事件中新增)
    • stopPropagation()(Fcuntion):取消事件的进一步捕获或冒泡。如果bubbles为true,则可以使用这个方法
    • target(Element):事件的目标(用户操作的那个元素,例如点击了一个button,但是事件注册在body上,那么target为button)
    • trusted(Boolean):为true表示事件是浏览器生成的。为false表示 事 件 是 由 开 发 人 员 通 过 JavaScript 创 建 的(DOM3级事件中新增)

    四.IE中的event对象(需要通过window.event来获得)

    • cancelBubble(Boolean):默认值为false,但将其设置为true就可以取消事件冒泡(与DOM中的stopPropagation()方法的作用相同)
    • returnValue(Boolean):默认值为true,但将其设置为false就可以取消事件的默认行为(与DOM中的preventDefault()方法的作用相同)
    • srcElement(Element):事件的目标(与DOM中的target属性相同)
    • type(String):被触发的事件的类型

    五.内存和性能

    • 如果出现一个页面有非常多的事件绑定,那么会对内存和性能造成影响。为了解决此类问题,可以采用“事件委托”的方法。事件委托指的是,只指定一个事件处理程序。例如click事件会一直冒泡到document,那么我们就在docoment的click事件中做处理。而不用为每个元素都绑定一个click事件。

    六.造一个轮子:模拟事件处理

    • 需求如下:
      • 实现add(添加事件)、remove(移除事件)、trigger(触发事件)三个方法
      • add:1.可以针对不同的事件名添加不同的处理程序;2.同一个处理程序只允许添加一次,多次添加会过滤
      • remove:1.可以针对不同的事件名移除对应的处理程序;
      • trigger:1.按顺序执行处理程序;2.一个处理程序报错,不会影响其他处理程序
      • 以上三个方法,需要返回对象本身

    // TODO:代码示例3

     

     

  • 相关阅读:
    理解区块链背后的Merkle Tree
    黑科技!当会爬虫的Python遇上会画图的FineBI……
    PlayFramework 1.x 生产环境部署 源码编译
    特别推荐:系统性能提升优先法宝 | 缓存应用实践
    Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy
    BI分析工具选型:从PowerBI到FineBI的9个理由!
    集群的定义以及类别定义
    python cx_oracle 绑定变量
    [故障解决]图文:windows apache无法启用 端口被占用
    设计模式之抽象工厂模式
  • 原文地址:https://www.cnblogs.com/ch11ry/p/7561004.html
Copyright © 2011-2022 走看看