美文网首页
事件代理的应用

事件代理的应用

作者: 学的会的前端 | 来源:发表于2019-02-21 15:35 被阅读0次

事件代理

原理:利用事件冒泡,把事件监听绑定到其父容器上。
应用场景:页面上有新增的元素,新增的元素也需要绑定事件。
源代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件</title>
    <style>
        .container {
            margin: 30px auto;
            width: 900px;
        }
        ul,li {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .container li {
            border: 1px solid #ccc;
            line-height: 1.5;
        }
        #show {
            background: #ccc;
        }
        #btn {
            border-radius: 3px;
            outline: none;
            margin: 3px 0;
            display: inline-block;
        }
    </style>
</head>
<body>
    <div class = "container">
        <ul>
            <li>aa</li>
            <li>bb</li>
            <li>cc</li>
            <li>dd</li>
        </ul>
        <input id = "add-ipt" type = "text"><button id = "btn">添加</button>
        <div id = "show"></div>
    </div>
    <script>
    var liNodes = document.querySelectorAll('.container li')
    var showNode = document.querySelector('#show')
    var addNode = document.querySelector('#btn')
    var addIpt = document.querySelector("#add-ipt")
    var container = document.querySelector('.container ul')
    liNodes.forEach(function(node){ //传入参数
        node.addEventListener('click',function(){
            showNode.innerText = this.innerText
        })
    })
    addNode.addEventListener('click',function(){
        var node = document.createElement('li')
        node.innerText = addIpt.value
        node.addEventListener('click',function(){
            showNode.innerText = this.innerText
        })
        container.appendChild(node)
    })
    </script>
</body>
</html>

事件代理的改进方法

container.addEventListener('click',function(e){
    var target = e.target
    if(target.tagName.toLowerCase() === 'li')
        showNode.innerText = target.innerText
})
addNode.addEventListener('click',function(){
    var node = document.createElement('li')
    node.innerText = addIpt.value
    container.appendChild(node)
    //新增元素不需要在绑定事件
})

要求:当鼠标放置在li元素上,会在img-preview里展示当前li元素的data-img对应的图片。

<ul class="ct">
    <li data-img="http://cdn.jirengu.com/book.jirengu.com/img/11.jpg">鼠标放置查看图片1</li>
    <li data-img="http://cdn.jirengu.com/book.jirengu.com/img/13.jpg">鼠标放置查看图片2</li>
    <li data-img="http://cdn.jirengu.com/book.jirengu.com/img/14.jpg">鼠标放置查看图片3</li>
</ul>
<div class="img-preview"></div>
<script>
var ct = document.querySelector('.ct'),
    childs = ct.querySelectorAll('li'),
    preview = document.querySelector('.img-preview');

for(var i=0; i<childs.length; i++){
    childs[i].addEventListener('mouseenter', function(){
       var dataImg = this.getAttribute('data-img');
       preview.innerHTML = '<img src="' + dataImg + '">'
    });
}

相关文章

  • 事件代理的应用

    事件代理 原理:利用事件冒泡,把事件监听绑定到其父容器上。应用场景:页面上有新增的元素,新增的元素也需要绑定事件。...

  • 代理模式

    ◆ 使用者无权访问目标对象◆ 中间加代理,通过代理做授权和控制 应用场景:◆ 网页事件代理◆ jQuery $.p...

  • DOM事件机制

    前言 本文主要介绍DOM事件级别、DOM事件模型、事件流、事件代理和Event对象常见的应用,希望对你们有些帮助和...

  • DOM事件机制

    前言 转载文,本文主要介绍DOM事件级别、DOM事件模型、事件流、事件代理和Event对象常见的应用,希望对你们有...

  • DOM事件机制

    前言 本文主要介绍DOM事件级别、DOM事件模型、事件流、事件代理和Event对象常见的应用,希望对你们有些帮助和...

  • iOS热更新之开屏广告

    iOS的通知是一个神器,它会发出应用的启动,退到后台等事件通知。一般我们需要用到app的代理,根据代理来判断应用进...

  • UIApplication的代理和应用程序的启动流程

    代理可以处理的事件包括: 1、监听应用程序的生命周期事件(如程序启动和关闭) 2、系统事件(如来电) 3、内存警告...

  • 第二十天web前端面试题

    1,什么是事件代理且描述事件代理的原理及为什么要用事件代理? 事件委托也叫事件代理。利用事件冒泡,让自己的触发的事...

  • 概念

    事件委托,事件代理 事件代理又称之为事件委托。是JavaScript中常用绑定事件的常用技巧。顾名思义,“事件代理...

  • 事件代理

    事件代理: 利用事件冒泡,把事件监听绑定到事件容器上。应用场景就是页面上有一些新增的元素,这些元素也都是需要绑定事...

网友评论

      本文标题:事件代理的应用

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