美文网首页
dom的一点看法

dom的一点看法

作者: 郑馋师 | 来源:发表于2019-12-12 23:47 被阅读0次

    阻止冒泡和默认事件

    JS事件流其中一种是冒泡事件,当一个元素被触发一个事件时,该目标元素的事件会优先被执行,然后向外传播到每个祖先元素,恰如水里的一个泡泡似的,从产生就一直往上浮,到在水平面时,它才消失。在这个过程中,如果你只希望事件发生在目标元素,而不想它传播到祖先元素上去,那么你需要在“泡泡”离开对象之前刺破它。
    js冒泡和捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件的进一步传播。使用event.preventDefault()可以取消默认事件。

    function stopBubble(e) { 
    //一般都会提供,因为现在已经不是ie的时代了
    if ( e && e.stopPropagation ) 
        e.stopPropagation(); }
    

    阻止默认事件

    function stopDefault(e) { 
    //一般都会提供,因为现在已经不是ie的时代了
    if ( e && e.preventDefault ) 
        e.preventDefault(); }
    

    事件委托

    有了事件冒泡,事件委托就有了基础,可以将事件的处理程序绑定给一个父级元素,当任何子节点触发了匹配的父级元素绑定的事件,即可触发父级节点的处理程序,这就是 事件委托 。eg中即时没有给每个 <li> 绑定事件,也会在点击任何一个 <li> 节点后跳转百度 。
    eg

    <ul onclick="location.herf'https://www.baidu.com/">
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
    </ul>
    

    减少事件绑定,事件委托将很多子元素的事件绑定都集中到一个通用的父元素,使得动态创建和移除的元素更加方便,不需要考虑元素的事件绑定逻辑。假设需要对 <li> 标签进行增加,只管进行操作就行,不用增加元素的 “onclick” 事件。
    减少事件监听使用的内存,这可能对那些经常重新加载的小页面效果不明显,但是对需要长时间运行的应用很重要。因为当元素被从 DOM 中移除之后很难追踪它对内存的使用,造成内存泄露,这是由元素的事件绑定造成的。有了事件委托,在移除子元素之后不用担心没有解除绑定事件。

    相关文章

      网友评论

          本文标题:dom的一点看法

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