事件机制?

news2024/9/28 15:24:55

事件流:

        描述的页面接收事件的顺序。先进行事件捕获 到达目标元素 在进行事件冒泡

分为事件捕获和事件冒泡

        事件冒泡:从具体元素从内向外依次触发事件

                从下面这个小案例可以清楚了解什么是事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .outer{
            width: 300px;
            height: 300px;
            background-color: red;
            margin: 0 auto;
            padding: 50px;
            box-sizing: border-box;
        }
        .center{
            width: 200px;
            height: 200px;
            background-color: pink;
            padding: 50px;
            box-sizing: border-box;
        }
        .inner{
            width: 100px;
            height: 100px;
            /* 渐变色 线性渐变 */
            background-image: linear-gradient(red,orange,cyan);
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="center">
            <div class="inner"></div>
        </div>
    </div>
    <script>
        var outer = document.querySelector('.outer')
        var center = document.querySelector('.center')
        var inner = document.querySelector('.inner')
        // 给outer绑定事件
        outer.onclick = function(){
            alert('outer');
            console.log(event,'事件对象');
            console.log(event.target,'事件目标源');
            console.log(event.currentTarget,'当前正在执行事件的元素');
        }
        // 给center绑定事件
        center.onclick = function(){
            alert('center');
            console.log(event.target,'事件目标源');
            console.log(event.currentTarget,'当前正在执行事件的元素');
        }
        // 给inner绑定事件
        inner.onclick = function(){
            alert('inner');
            console.log(event.target,'事件目标源');
            console.log(event.currentTarget,'当前正在执行事件的元素');
        }
    </script>
</body>
</html>

 浏览器运行结果如下:

                从浏览器运行结果可以看出,它是从内向外一层一层向上冒泡。 

        那么如果我们不想让事件进行冒泡,也就是说当我们点击最里面的小方块时,只弹框inner,那么就可以调用event.stopPropagation();这个方法来阻止事件冒泡。

        事件捕获:从最不具体的元素从外向内依次触发事件 

                从下面这个小案例可以清楚了解什么是事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .outer{
            width: 300px;
            height: 300px;
            background-color: red;
            margin: 0 auto;
            padding: 50px;
            box-sizing: border-box;
        }
        .center{
            width: 200px;
            height: 200px;
            background-color: pink;
            padding: 50px;
            box-sizing: border-box;
        }
        .inner{
            width: 100px;
            height: 100px;
            /* 渐变色 线性渐变 */
            background-image: linear-gradient(red,orange,cyan);
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="center">
            <div class="inner"></div>
        </div>
    </div>
    <script>
        var outer = document.querySelector('.outer')
        var center = document.querySelector('.center')
        var inner = document.querySelector('.inner')
        function handler1(){
            alert('我是outer');
        }
        function handler2(){
            alert('我是center');
        }
        function handler3(){
            alert('我是inner');
        }
        outer.addEventListener('click',handler1,true)
        center.addEventListener('click',handler2,true)
        inner.addEventListener('click',handler3,true)
    </script>
</body>
</html>

浏览器运行结果如下:

 

                 从浏览器运行结果可以看出,它是从外向内一层一层进行捕获的。

DOM0级事件和DOM2级事件 

        DOM0级:

                绑定事件------不可以追加同一类型事件

                元素.on事件类型 = function(){}

                解绑事件

                元素.on事件类型 = null;

        DOM2级:

                绑定事件  可以追加同一类型事件

                元素.addEventListener('事件类型',事件处理程序,true/false),true 表示事件在捕获阶段执行,false表示事件在冒泡阶段执行,默认为false。

                解绑事件 

                元素.removeEventListener('事件类型',具名处理程序)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>点击我</button>
    <script>
        // dom0级绑定  元素.on事件类别 = 事件处理程序
        // dom0级同一类型事件不可以追加  后面事件的会覆盖前面的
        var btn = document.querySelector('button');
        btn.onclick = function(){
            alert('我被点击了')
        }
        // btn.onclick = function(){
        //     alert('我第二次被点击了')
        // }
        // dom0级事件解绑
        btn.onclick = null;

        /**
         * DOM2级事件
         * dom2级事件绑定  addEventListener(事件类型,事件处理程序,true/flase 表示的是事件在捕获或者冒泡阶段执行)
         * 默认为flase 表示事件在冒泡阶段执行  true表示进行事件捕获
        */
       function handler(){
        alert('第一次触发')
       }
       function handler1(){
        alert('第二次触发')
       }
       btn.addEventListener('click',handler,false)
       btn.addEventListener('click',handler1,false)
       // dom2级事件解绑   removeEventListener('事件类型',具名处理程序)
       btn.removeEventListener('click',handler)
    </script>
</body>
</html>

阻止事件默认行为

        event.perventDefault();

        正常情况下,当我们点击a标签或者提交按钮时会进行页面跳转,但是如果我们给a标签绑定单击事件,并阻止它的默认行为,那它就无法跳转。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="text.php">
        <input type="submit" value="提交">
    </form>
    <a href="https://asdasdasda">页面跳转</a>
    <script>
        var input = document.querySelector('input')
        var a = document.querySelector('a')
        input.onclick = function(){
            // 阻止元素的默认行为
            event.preventDefault();
        }
        a.onclick = function(){
            // 阻止元素的默认行为
            event.preventDefault();
        }
    </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1262359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BUUCTF 我吃三明治 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 下载附件&#xff0c;解压得到一张.jpg图片。 解题思路&#xff1a; 1、使用010 Editor打开.jpg文件&#xff0c;在.jpg文件尾的位置发现了第二张图片&#x…

陪诊系统|沈阳陪诊系统定制|陪诊软件保障患者安全与便利

陪诊系统是一种以专业医疗服务为核心的综合性陪同体系。它涵盖了医院前线咨询、专业陪诊、医后关怀等多个环节&#xff0c;提供全方位的医疗咨询服务和专业的医疗陪同服务。通过陪诊系统&#xff0c;患者可以获得更加便捷、高效、安全的医疗服务体验。陪诊系统的出现&#xff0…

pyenv local x.xx.x不生效

我本地原来有个python&#xff0c;之后用pip安装了pyenv&#xff0c;使用pyenv新安装了一个python&#xff0c;设置某个local的时候发现不生效。 这种情况需要检查3个地方。 1.有没有生成这个文件 2.需要重新开一个cmd 3.需要保证pyenv的path环境变量比之前本地的python优先…

【每日一题】子数组的最小值之和

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贡献法单调栈 写在最后 Tag 【贡献法】【单调栈】【数组】【2023-11-27】 题目来源 907. 子数组的最小值之和 题目解读 计算整数数组的连续子数组中最小值的和。 解题思路 本题朴素的解决思想是求出所有的连续子数组…

美团小游戏rpk包对接流程小记

美团小游戏rpk包对接流程小记 美团小游戏开发时&#xff0c;其实很简单&#xff0c;和各大厂差不多。 一、先贴个文档&#xff1a; 美团游戏开放平台文档地址&#xff1a; https://game.meituan.com/#/docs二、接入前准备&#xff1a; 与微信抖音小游戏的流程差不多&#xf…

A preview error may have occurred. Switch to the Log tab to view details.

我们在学习鸿蒙应用开发的UIAbility内页面间的跳转内容的时候会遇到页面无法跳转的问题。并伴随标题的error报错 Entry Component struct Index {build() {Column({ space: CommonConstants.COLUMN_SPACE }) {//UIAbility内页面间的跳转Button(Next).onClick(() > {router.…

Matplotlib散点图的创建_Python数据分析与可视化

Matplotlib散点图的创建 plot绘制散点图scatter画散点图plot与scatter效率对比 plot绘制散点图 散点图也是在数据科学中常用图之一&#xff0c;前面的文章我们学习了使用plt.plot/ax.plot画线形图的方法。同样的&#xff0c;现在用这些函数来画散点图&#xff1a; x np.lins…

★数据库建表优化

1、冷热分离&#xff1a; 一个表里最好不要存在即有常修改的数据又有不常修改的数据&#xff0c;一个好的做法是&#xff0c;把常修改更新的字段当做热表单独建表&#xff0c;同理不经常修改更新的字段当做冷表单独建表。 2、控制B树的高度&#xff1a; 也就是控制一个表存储的…

四、Lua循环

文章目录 一、while(循环条件)二、for&#xff08;一&#xff09;数值for&#xff08;二&#xff09;泛型for&#xff08;三&#xff09;repeat util 既然同为编程语言&#xff0c;那么控制逻辑里的循环就不能缺少&#xff0c;它可以帮助我们实现有规律的重复操作&#xff0c;而…

GoLong的学习之路,进阶,RabbitMQ (消息队列)

快有一周没有写博客了。前面几天正在做项目。正好&#xff0c;项目中需要MQ&#xff08;消息队列&#xff09;&#xff0c;这里我就补充一下我对mq的理解。其实在学习java中的时候&#xff0c;自己也仿照RabbitMQ自己实现了一个单机的mq&#xff0c;但是mq其中一个特点也就是&a…

单片机薪资翻倍的学习方向

今天以一个案例&#xff0c;给大家分析下做单片机开发&#xff0c;薪资翻倍的底层逻辑和方法论&#xff0c;尽量做到有理有据。 我是2011年开始做单片机开发的&#xff0c;那几年&#xff0c;单片机的工资&#xff0c;可以说是惨不忍睹。 相关贴吧也是一片哀嚎&#xff0c;有些…

伦敦金新手和有经验的投资者 他们有什么不同?

按照笼统的分类&#xff0c;伦敦金市场中的投资者可以分为新手和有经验的&#xff0c;当然其中并没有明确的界限&#xff0c;不是说投资者做伦敦金交易满2年就一定会成为有经验的投资者。但是从下面我们的对比中&#xff0c;我们或许可以看出新手和有经验投资者的一些差别。 先…

「琥珀黄」农产品销售运营大屏助力农产品销售改革

农业作为国家经济的重要支柱产业&#xff0c;农产品销售一直备受关注。农产品销售一直是农业行业关注的焦点之一。随着科技进步和市场竞争的加剧&#xff0c;传统的销售方式面临着新的挑战。为了让农产品销售实现腾飞&#xff0c;我们需要打破传统&#xff0c;采用新的销售策略…

自然资源科普交互大屏助力自然资源的保护

在当代社会&#xff0c;自然资源的科学管理和可持续利用变得愈发重要。为了提高公众对于自然资源的认知和理解&#xff0c;科普交互大屏成为一个新兴的工具。它通过生动的图像和实时数据展示&#xff0c;以及与观众的互动方式&#xff0c;让人们更深入地了解自然资源和环境保护…

【Leetcode】907. 子数组的最小值之和

给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此 返回答案模 10^9 7 。 示例 1&#xff1a; 输入&#xff1a;arr [3,1,2,4] 输出&#xff1a;17 解释&…

Spine深入学习———— 渲染

数据有了之后&#xff0c;就开始渲染 渲染相关 绘制顺序 骨架的绘制顺序就是一个插槽列表&#xff0c;在插槽列表中上方的附件在下方之上绘制&#xff0c;绘制顺序可以在层级树中的骨架下查看。 基础流程 渲染实现 以下按照cocos2dx的实现来 &#xff08;cocos2dx 3.7 spin…

leetCode 216.组合总和 III + 回溯算法 + 剪枝 + 图解 + 笔记

找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解释…

两部手机数据传输后备忘录不见了怎么回事

想必很多人都遇到过&#xff0c;当两部手机进行备忘录数据传输后&#xff0c;突然发现备忘录不见了&#xff0c;这让人不禁着急上火&#xff0c;我也曾经遇到过这种事情导致很多重要的内容都丢失了。 一般出现这种情况可能是因为&#xff0c;两部手机使用的是不同的云服务&…

重生奇迹MU魔法师操作技能

重生奇迹MU魔法师增加伤害加点方式 一、智力敏捷加点&#xff1a;2点智力1点敏捷&#xff0c;这种加点就是智敏结合的加点了&#xff0c;属性是不错的&#xff0c;提升了非常多的属性点&#xff0c;智力是偏重输出的&#xff0c;也是法师最常见的一种加点了&#xff0c;输出伤…

Mac电脑音乐标签管理 Yate 激活最新 for Mac

Yate是一款非常实用的音频编辑和标记软件&#xff0c;它提供了丰富的功能和工具来帮助用户编辑、整理和管理音频文件。无论是在音乐收藏管理、DJ和音乐制作方面&#xff0c;还是在其他需要处理大量音频文件的领域&#xff0c;Yate都是非常值得推荐的工具。 Yate for Mac功能特…