• js03.事件


    概述:

       js事件是有级别的, 原生的事件, on开头的事件, 我们称之为dom0级事件, 还有dom2级事件.

    1. dom0级事件和dom2级事件

    阶段

    dom事件是有阶段之说的:

      一个事件分为捕获阶段, 冒泡阶段, dom0级事件只有冒泡阶段, 没有捕获阶段

      捕获阶段 : window -->  document --> body --> div

      冒泡阶段:  window <-- document <-- body <-- div

    dom0级事件只有冒泡阶段,没有捕获阶段

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            div.outer{
                position: relative;
                 100px;
                height: 100px;
                background-color: red;
                margin: auto;
    
            }
            div.inner{
                position: absolute;
                margin-left: 30px;
                margin-top: 30px;
                 40px;
                height: 40px;
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <div class="outer">
            <div class="inner">
    
            </div>
        </div>
        <script>
            // dom0级事件,是以onxxx开头的事件,只有冒泡阶段, 没有捕获阶段
            var inner = document.querySelector('.inner');
            var outer = document.querySelector('.outer');
    
            window.onclick = function(){
                alert('我是冒泡阶段的windo')
            };
    
            document.onclick = function(){
                alert('我是冒泡阶段的document')
            };
    
            document.body.onclick = function(){
                alert('我是冒泡阶段的body')
            };
    
            outer.onclick = function(){
                alert('我是外层的div 我触发了')
            };
    
            inner.onclick = function () {
                alert('我是内层div, 我触发了')
            }
        </script>
    </body>
    </html>

    点击内层黄色的div, 发现所有点击事件都触发了,出发顺序从内层到外层依次出发, 这就称之为冒泡

    dom2级事件

      不仅仅有冒泡阶段,还有捕获阶段

      语法: div.addEventListener(eventType, callback, 布尔值)

        1: 第一个参数是事件的类型, click, dbclick, mouserover .....

        2:第二个参数是回调函数,当事件触发的时候,回调函数会执行

        3:如果布尔值是true,则表示该函数是捕获阶段,否则为冒泡阶段

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .outer{
                position: relative;
                 100px;
                height: 100px;
                margin: auto;
                margin-top: 100px;
                background-color: red;
            }
            .inner{
                position: absolute;
                margin-top: 40px;
                margin-left: 40px;
                 30px;
                height: 30px;
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <div id="outer" class="outer">
            <div id="inner" class="inner">
    
            </div>
        </div>
    
        <script>
            var inner = document.getElementById('inner');
            var outer = document.getElementById('outer');
    
            // window对象的捕获阶段
            window.addEventListener('click', function () {
                alert('我是window的捕获阶段')
            }, true);
    
            document.addEventListener('click', function () {
                alert('我是document的捕获阶段')
            }, true);
    
            document.body.addEventListener('click', function () {
                alert('我是body的捕获阶段')
            }, true);
    
            outer.addEventListener('click', function () {
                alert('我是outer的捕获阶段')
            }, true);
    
            inner.addEventListener('click', function (argument) {
                alert('我执行了')
            }, true)
        </script>
    </body>
    </html>

    点击最内层的div会发现从window开始由大到小依次执行点击事件的捕获阶段

    单机事件的第三个参数设置为false时,改事件执行冒泡阶段

    2. 事件的移除

      dom2 级事件的移除方法是 removeEventListenr(eventtype, callback, 布尔值)

      如果不传递第三个参数,默认是冒泡阶段

    3.特殊事件

      概述: 在js当中有两个非常出名的事件 onmouseenter 和 onmouseout 不冒泡

         onmouseenter和onmouseleave不会有冒泡事件

         onmouseover和onmouseout有冒泡事件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            #num1{
                position: relative;
                 100px;
                height: 100px;
                background: red;
                margin: 50px auto;
            }
            #num2{
                position: absolute;
                 50px;
                height: 50px;
                background-color: yellow;
                margin: 25px 25px;
            }
            #num3{
                position: absolute;
                 25px;
                height: 25px;
                background-color: blue;
                margin: 12.5px 12.5px;
            }
        </style>
    </head>
    <body>
        <div id="num1">
            <div id="num2">
                <div id="num3">
    
                </div>
            </div>
        </div>
        <script>
            // var num1 = document.getElementById('num1');
            // num1.onmouseover = function(){
            //     console.log('我是mum1的mouseouver');
            // };
            // var num2 = document.getElementById('num2');
            // num2.onmouseover = function(){
            //     console.log('我是mum2的mouseouver');
            // };
            // var num3 = document.getElementById('num3');
            // num3.onmouseover = function(){
            //     console.log('我是mum3的mouseouver');
            // };
            var num1 = document.getElementById('num1');
            num1.onmouseenter = function(){
                console.log('我是mum1的mouseouver');
            };
            var num2 = document.getElementById('num2');
            num2.onmouseenter = function(){
                console.log('我是mum2的mouseouver');
            };
            var num3 = document.getElementById('num3');
            num3.onmouseenter = function(){
                console.log('我是mum3的mouseouver');
            };
        </script>
    </body>
    </html>
  • 相关阅读:
    python 修改excel
    python 正则表达式规则收集
    anusplina 4.36版本使用提示 说明
    python 汉字编码问题
    python IOError: [Errno 22] invalid mode ('r') or filename:
    将矩阵数据转换为栅格图 filled.contour()
    将数值矩阵映射为栅格图
    一脚踩进java之基础篇23——常用API(Object、String)
    一脚踩进java之基础篇22——面向对象 (不同修饰符使用细节)
    一脚踩进java之基础篇21——面向对象 (访问修饰符、代码块)
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/12153977.html
Copyright © 2020-2023  润新知