zoukankan      html  css  js  c++  java
  • JS——冒泡案例

    模态框

    1、因为a链接和和顶级document都注册了单击事件,所以要阻止a链接向父级盒子冒泡,不然又会从document的单击事件走一遍

    2、在document的单击事件中,只需要判断触发事件的目标元素是不是白色盒子部分就行了

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                padding: 0;
                margin: 0;
            }
    
            body, html {
                height: 100%;
            }
    
            .mask {
                width: 100%;
                height: 100%;
                position: fixed;
                top: 0;
                left: 0;
                background: rgba(0, 0, 0, 0.6);
                display: none;
            }
    
            .login {
                width: 200px;
                height: 200px;
                background: white;
                margin: 200px auto;
                border: 3px solid #FFA25E;
            }
        </style>
    </head>
    <body>
    <a href="#">注册</a>
    <a href="#">登陆</a>
    <div class="mask">
        <div class="login" id="login"></div>
    </div>
    <script>
        //需求:点击登陆a链接,显示模态框,之后点击除了中间白色登陆框部分,都可以将模态框部分隐藏
        var a = document.getElementsByTagName("a")[1];
        var mask = document.getElementsByTagName("div")[0];
    
        a.onclick = function (ev) {
            ev = ev || window.event;
            mask.style.display = "block";
            if (ev || ev.stopPropagation) {
                ev.stopPropagation();
            } else {
                ev.cancelBubble = true;
            }
        }
        document.onclick = function (ev) {
            ev = ev || window.event;
            var targetId = ev.target ? ev.target.id : ev.srcElement.id;
            if (targetId !== "login") {
                mask.style.display = "none";
            }
        }
    </script>
    </body>
    </html>

    事件委托

    1、普通注册事件没有办法为新创建的元素绑定事件。所以我们要使用冒泡的特性,事件委托。

    2、虽然新追加的li标签没有注册上单击事件,但是冒泡的特性会找到其父标签,恰好父标签注册了单击,而触发事件的target目标元素如果是li标签就好办了。

    3、注意通过event.target.tagName获取的值是大写的

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                padding: 0;
                margin: 0;
                list-style: none;
            }
    
            ul {
                width: 100px;
                margin: 50px auto;
            }
    
            li {
                background: #CCA55B;
                margin: 10px;
                cursor: pointer;
                text-align: center;
            }
        </style>
    </head>
    <body>
    <button>创建新人</button>
    <ul>
        <li>老人</li>
        <li>老人</li>
        <li>老人</li>
        <li>老人</li>
    </ul>
    <script>
        var btn = document.getElementsByTagName("button")[0];
        var ul = document.getElementsByTagName("ul")[0];
        // for (var i = 0; i < ul.children.length; i++) {
        //     ul.children[i].onclick = function () {
        //         console.log(this.innerHTML);
        //     }
        // }
        btn.onclick = function () {
            for (var i = 0; i < 4; i++) {
                var li = document.createElement("li");
                li.innerHTML = "新人";
                ul.appendChild(li);
            }
        }
        ul.onclick = function (ev) {
            ev = ev || window.event;
            var target = ev.target ? ev.target : ev.srcElement;
            if (target.tagName === "LI") {
                console.log(target.innerHTML);
            }
        }
    </script>
    </body>
    </html>

  • 相关阅读:
    【转】Redis主从复制简介
    Redis配置文件详解
    Redis在Windows环境下搭建
    Redis桌面管理工具 RedisDesktopManager
    Redis服务停止报错解决方案[NOAUTH Authentication required]
    Redis启动警告错误解决
    修改tcp内核参数:somaxconn
    CentOS6.8安装Redis3.2.5
    Github之协同开发
    自定义实现栈的功能
  • 原文地址:https://www.cnblogs.com/wuqiuxue/p/7988074.html
Copyright © 2011-2022 走看看