zoukankan      html  css  js  c++  java
  • 事件机制

    DOM2事件流

    事件捕获阶段 --- 处于目标阶段 --- 事件冒泡阶段

    事件捕获

    当触发某个元素的事件时,会从顶层对象document发出一个事件流,随着dom树向目标元素节点流去,直到找到目标节点才停止。在捕获阶段,该事件的处理函数不会执行。

    处于目标阶段

    当到达目标元素时,触发相应事件,执行相应处理函数。

    事件冒泡

    当触发某个元素的事件时,会从该元素一层层的向上传播,直到到达document元素。在此途中,如果有节点绑定了相应的事件处理函数,则都会被触发

    阻止事件冒泡

    firefox浏览器:e.stopPropagation()

    IE浏览器:e.cancelBubble() = true

    得到事件代理对象和事件源

    xxx.onclick = funtion(e){
        var event = e ||window.event;
        var target = event.target || event.srcElement;
    }

    事件代理

    利用事件冒泡机制,将事件绑定在父元素身上,当触发子元素的某事件时,会先冒泡到父元素上,然后父元素判断事件源对象是否为目标元素,再决定是否执行处理函数

    <ul class="uu">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <script>
            var ulobj = document.querySelector('.uu');
            ulobj.onclick = function (e) {
                var event = window.event || e;
                var target = event.srcElement || event.target;
                if (target.tagName.toLowerCase() === 'li') {
                    alert('点到啦')
                }
            }
        </script>

    监听事件的方式

    DOM0级中,通过`on+事件名`的方式监听事件

    ulobj.onclick = function (e) {}

    DOM2级中,通过addEventListener监听事件,removeEventListener移除事件

    // 第一个参数:事件类型  第二个参数:事件处理函数 第三参数:是否使用事件捕获,默认为false
    ulobj.addEventListener('click', func, false)
    ulobj.removeEventListener('click', func, false)

    而在老的IE版本中,需要处理兼容

    ulobj.attachEvent('on'+type, func) // 绑定
    ulobj.detachEvent('on'+type, func) // 移除
  • 相关阅读:
    [BZOJ 3774]最优选择
    [HDU 6598]Harmonious Army
    [SP2063]MPIGS-Sell Pigs
    [CF103E]Buying Sets
    [LOJ 6058]百步穿杨
    [CQOI2014]危桥
    李宏毅机器学习课程笔记-3.梯度下降精讲
    李宏毅机器学习课程笔记-2.5线性回归Python实战
    李宏毅机器学习课程笔记-2.4交叉验证
    李宏毅机器学习课程笔记-2.3欠拟合与过拟合
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12732212.html
Copyright © 2011-2022 走看看