zoukankan      html  css  js  c++  java
  • JavaScript


    事件监听

    标准:addEventListener(eventType, handler, useCapture) / IE:attachEvent(eventType, handler)
    removeEventListener, detachEvent
    之所以出现这两种是因为当时网景主张事件捕获,微软主张事件冒泡。w3c标准下采取了折中,先捕获再冒泡。

    这样,事件的触发过程就有了三个阶段:
    1,捕获阶段:document往事件触发地点,向下捕获前进,遇到相同的注册事件类型就立即触发执行。
    2,到达事件位置:触发事件。
    3,冒泡阶段:从事件触发位置向document往外冒泡,遇到相同注册事件就立即触发。

    ps: dom1级事件绑定只能在冒泡阶段触发

    在同一个对象上注册事件,也并不一定按照注册的顺序执行,而是按照事件绑定的节点顺序。

    值得一提的,阻止冒泡的stopPropagation()的方法,它不止会阻止事件冒泡,还会阻止事件捕获。
    比如你在捕获类型中使用,它会阻止事件的进一步传播。

    值得一提的,stopImmediatePropagation()方法。如果给一个对象注册了两次click事件,分别执行两个处理函数func1/func2。
    那么在func1中使用stopPropagation,func2也会执行,只有使用stopImmediatePropagation()才能立即中断事件处理。

    HTML内联 / DOM属性绑定
    耦合度高

    自定义事件

    Event
    1,new一个Event实例,参数是事件类型名。`new Event('myevent')`
    2,绑定事件监听 `elem.addEventListener('myevent', function (e) { ... }, false);`
    3,dispatchEvent模拟触发事件 `elem.dispatchEvent(event);`

    CustomEvent
    1,new 一个实例 `new CustomEvent(eventname, options)`
    2,3,同上
    附带数据options
    ```
    {
    detail: { //初始化信息 },
    bubbles: true,
    ....
    }
    ```
    模拟事件触发,是可以冒泡的~

    事件代理

    原理是,事件绑定后,将会从绑定的父元素节点向下前进到触发事件的元素,再冒泡回绑定的父元素dom.
    所以我们不必为每个子元素都注册上事件,只要对他的父元素进行监听,即可代理对后代dom的监听。
    而我只需要通过event.target就能获得触发的子元素并响应。

    这样意味着,节省了大量重复的事件监听,减少资源消耗;让html独立,如有增加子元素,也不必再单独监听。

    事件对象
    每个事件被触发的时候,会创建一个事件对象Event Object。

    常用属性/方法:
    type:
    target: 要触发的目标节点(IE -> srcElement)
    currentTarget: 正在处理事件的节点(IE -> this)
    bubbles: 事件是否在冒泡阶段触发
    stopPropagation():
    preventDefault(): 禁止默认行为
    cancelable: 是否可以使用preventDefault()禁止默认行为
    eventPhase: 事件触发处于什么阶段(0 none - 1 - 2 - 3)
    pageX: pageY...

    常用事件
    load: 所有资源加载好之后触发
    DOMContentLoaded: DOM 构建好之后触发(jQuery.ready)
    resize:
    当节点尺寸发生变化时,触发这个事件。通常用在 window 上,这样可以监听浏览器窗口的变化。
    通常用在复杂布局和响应式上。
    出于对性能的考虑,你可以使用函数 throttle 或者 debounce 技巧来进行优化。
    throttle 方法大体思路就是在某一段时间内无论多次调用,只执行一次函数,到达时间就执行;
    debounce 方法大体思路就是在某一段时间内等待是否还会重复调用,如果不会再调用,就执行函数,如果还有重复调用,则不执行继续等待。
    error: 加载资源失败或者加载成功但是只加载一部分而无法使用时触发

    参考

    [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event#Properties)

    [Events Order](http://www.quirksmode.org/js/events_order.html)

  • 相关阅读:
    Centos7.3防火墙配置
    Centos7使用yum安装MySQL5.6的正确姿势
    Connect C# to MySQL
    ADO.NET操作MySQL数据库
    Mac OS 上 VIM 8.0 安装体验
    WebSocket实战之————Workerman服务器的安装启动
    C语言实现文件复制功能(包括文本文件和二进制文件)
    Gateway/Worker模型 数据库使用示例
    [转]Using the Group Pane to Repeat Page Titles
    [转]学习 WCF (6)--学习调用WCF服务的各种方法
  • 原文地址:https://www.cnblogs.com/travelling-wxy/p/5285615.html
Copyright © 2011-2022 走看看