首页 > 编程语言 >javascript-Web APLs (三)

javascript-Web APLs (三)

时间:2024-10-29 21:46:52浏览次数:3  
标签:阶段 Web APLs 捕获 javascript 事件 addEventListener 解绑 冒泡

 事件流

指的是事件完整执行过程中的流动路径

 说明:假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段   简单来说:捕获阶段是 从父到子 冒泡阶段是从子到父   实际工作都是使用事件冒泡为主

事件捕获

DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
addEventListener第三个参数传入 true 代表是捕获阶段触发(很少使用)   若传入false代表冒泡阶段触发,默认就是false  若是用 L0 事件监听,则只有冒泡阶段,没有捕获

事件冒泡

当一个元素触发事件后,会依次向上调用所有父级元素的 同名事件

事件冒泡是默认存在的 l L2事件监听第三个参数是 false,或者默认都是冒泡
<div class="fa">
        <div class="son"></div>
    </div>
<script>
const fa = document.querySelector('.fa')
        const son = document.querySelector('.son')
        document.addEventListener('click',function(){
            alert('我是爷爷')
        })
        fa.addEventListener('click',function(){
            alert('我是父亲')
        })
        son.addEventListener('click',function(e){
            alert('我是儿子')
            
        })
</script>

当点击儿子文本框时,会依次弹出,我是儿子,我是父亲,我是爷爷

阻止冒泡

问题:因为默认就有冒泡模式的存在,所以容易导致事件影响到父级元素

前提:阻止事件冒泡需要拿到事件对象

事件对象.stopPropagation()

注意:此方法可以阻断事件流动传播,不光在冒泡阶段有效,捕获阶段也有效 

我们某些情况下需要 阻止默认行为的发生,比如 阻止 链接的跳转,表单域跳转
<form action="http://www.baidu.com">
  <input type="submit" value="提交">
</form>
<script>
    const form = document.querySelector('form')
    form.addEventListener('click',function(e){
        //阻止表单默认提交行为
        e.preventDefault()
})
</script>

解绑事件

on事件方式,直接使用null覆盖偶就可以实现事件的解绑 语法:
//绑定事件
btn.onclick = function () {
    alert('点击了')
}
//解绑事件
btn.onclick = null
addEventListener方式,必须使用: removeEventListener(事件类型, 事件处理函数, [获取捕获或者冒泡阶段]) 例如:
function fn() {
    alert('点击了')
}
//绑定事件
btn.addEventListener('click',fn)
//解绑事件
btn.removeEventListener('click',fn)
注意:匿名函数无法被解绑 鼠标经过事件区别: mouseover 和 mouseout 会有冒泡效果   mouseenter 和 mouseleave 没有冒泡效果 (推荐) 两种注册事件的区别   传统on注册(L0)
  1.  同一个对象,后面注册的事件会覆盖前面注册(同一个事件)
  2.  直接使用null覆盖偶就可以实现事件的解绑
  3.  都是冒泡阶段执行的
  事件监听注册(L2)
  1.  语法: addEventListener(事件类型, 事件处理函数, 是否使用捕获)
  2.  后面注册的事件不会覆盖前面注册的事件(同一个事件)
  3.  可以通过第三个参数去确定是在冒泡或者捕获阶段执行
  4.  必须使用removeEventListener(事件类型, 事件处理函数, 获取捕获或者冒泡阶段)
  5.  匿名函数无法被解绑

 事件委托

 其他事件

 元素尺寸与位置

标签:阶段,Web,APLs,捕获,javascript,事件,addEventListener,解绑,冒泡
From: https://blog.csdn.net/2301_80115241/article/details/143350570

相关文章

  • 从零开始的JavaScript基础!
    目录一、JavaScript的概述二、如何在HTML页面中使用JS(一)、行内式 (二)、内嵌式(三)、外链式(四)、基本执行顺序1.从上到下线性执行:2.阻塞行为:(五)、JS输出方式1. alert() 通过浏览器弹出框进行输出 2.document.write() 直接在网页页面中进行输出 3.console.log()......
  • ctfshow-web入门-爆破(24)
    1.根据题目提示:参考PHP随机数的伪随机数mt_srand(seed);函数播种MersenneTwister随机数生成器。seed,可选。从PHP4.2.0开始,随机数生成器自动播种,因此没有必要使用该函数因此不需要播种,并且如果设置了seed参数生成的随机数就是伪随机数,意思就是每次生成的随机数是一......
  • 2024网鼎杯初赛-青龙组-WEB gxngxngxn
    WEB01开局随便随便输入都可以登录,登上去以后生成了一个token和一个session,一个是jwt一个是flask框架的这边先伪造jwt,是国外的原题CTFtime.org/DownUnderCTF2021(线上)/JWT/Writeup先生成两个token,然后利用rsa_sign2n工具来生成公钥python3jwt_forgery.pyeyJhbGciOi......
  • webpack总结
    ......
  • 【Nginx学习】5步轻松搞定:用Nginx配置一个静态Web服务器,文件路径定义你真的会了吗?
    ......
  • Grafana Nginx 403 Origin not allowed 及 ws websocket连接错误解决
    GrafanaNginx403Originnotallowed及wswebsocket错误解决---我超怕的https://www.cnblogs.com/iAmSoScArEd/p/18514291注意,这里日志并不全,仅贴了关键解决问题的部分,请勿直接复制粘贴用于生产环境。http{#解决websocket错误https://nginx.org/en/docs/http/we......
  • JavaScript基本内容续集之函数和对象
    书接上篇,我们讲到了JavaScript的基本内容,这篇讲到JavaScript的函数和对象。目录一、函数(一)概述(二)函数的定义(三)函数的使用1、在程序中调用(分为有返回值和无返回值调用)①无返回值的调用②有返回值的调用2、常见事件①在超链接被点击时调用(监听点击事件)②在按钮被点击......
  • Python Web 前后端分离 后台管理系统 Django+vue(完整代码)
    1.前后端分离的架构在前后端分离的架构中,前端和后端分别作为独立的项目进行开发和部署。前端项目通过API与后端项目进行通信。前端:使用Vue.js构建用户界面,调用后端提供的RESTfulAPI获取和发送数据。后端:使用Django构建API,处理业务逻辑和数据存储2.创建django项目及vue项目......
  • 重要webpack性能优化
    1.webpack优化打包构建速度-开发体验和效率优化babel-loader缓存:cacheDirectory,只要加了这个,es6代码中没有改动的就不会重新编译,集中缓存,加快速度。IgnorePlugin避免引入无用模块比如有个Moment.js库支持很多语言避免引入过多的语言,动态引入。noParse避免重复......
  • webpack5基本配置
    面试真题:前端代码为什么要进行构建和打包?(答全面)modulechunkbundle分别是什么意思?有何区别?loader和plugin的区别?webpack如何实现懒加载?babel-runtime和babel-polyfill?webpack常见的性能优化1.webpack5的小调整2.webpack基本配置-拆分配置和mergemode:公共......