当前位置: 首页 > article >正文

js-day7

JS学习之旅-day7

  • 1.事件流
    • 1.1 事件流与两个阶段说明
    • 1.2 事件捕获
    • 1.3 事件冒泡
    • 1.4 阻止
    • 1.5 解绑事件
  • 2. 事件委托
  • 3. 其他事件
    • 3.1 页面加载事件
    • 3.2 页面滚动事件
    • 3.3 页面尺寸事件
  • 4. 元素尺寸与位置

1.事件流

1.1 事件流与两个阶段说明

  1. 事件流指的是事件完整执行过程中的流动路径
  2. 两个阶段:
    1. 捕获阶段(事件捕获):Document->Element html->Element body->Element div
    2. 冒泡阶段(事件冒泡):Element div ->Element body->Element html->Document
    3. 简单来说:捕获是父到子,冒泡是子到父

1.2 事件捕获

  1. 概念:从DOM的根元素开始去执行对应的事件(从外到里)
  2. 代码:DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
  3. 说明:
    1. addEventListener第三个参数传入 true 代表是捕获阶段触发
    2. 若传入false代表冒泡阶段触发,默认是false

1.3 事件冒泡

  1. 概念:当一个元素的事件被触发时,同样的事情将会在该元素的所有祖先元素中依次被触发。
  2. 简单理解:当一个元素触发事件后,会依次向上调用所有父亲组件的同名事件
  3. 代码:DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
  4. 第三个参数不写或者传入false

1.4 阻止

  1. 事件对象.stopPropagation():阻止传播(包含冒泡、捕获)
  2. 事件对象.preventDefault():阻止默认行为(包含链接跳转,表单域跳转)
  3. 在事件绑定的回调函数的第一个参数就是事件对象,一般命名为 event/ev/e

1.5 解绑事件

  1. L0
    btn.onclick = function () {alert('点击了')// 解绑事件btn.onclick = null
    }
    
  2. L2:removeEventListener(事件类型,事件处理函数,[添加时使用的阶段(true:捕获;false:冒泡])
    function fn() {alert('点击了')
    }
    //这里第三个参数为true的话,解绑的第三个参数也要为true
    btn.addEventListener('click', fn)  
    // 解绑事件
    btn.removeEventListener('click', fn)
    
    注意:匿名函数无法被解绑

2. 事件委托

  1. 事件委托是利用事件流的特效解决一些需求的知识技巧
  2. 优点:减少注册次数,可以提高程序性能
  3. 原理:利用事件冒泡。给父元素注册事件,当我们触发子元素时,会冒泡到父元素上,从而触发父元素的事件。
  4. 实现:事件对象.target可以获取到真正触发事件的元素,如果需要加判定条件可以使用事件对象.target.tagName

3. 其他事件

3.1 页面加载事件

  1. 加载外部资源(如图片、外联css和js等)加载完毕时触发的事件
    1. 事件名:load
    2. 监听页面所有资源加载完毕:给window添加load事件
      window.addEventListener('load',function(){})
      
    3. 针对某个资源绑定load事件
       const img = document.querySelector('#img')img.addEventListener('load',function(){console.log('图片加载完毕');})
      
  2. 当初始的HTML文档被完全加载后,DOMContentLoaded事件被触发,无需等待样式表、图片等完全加载
    1. 事件名:DOMContentLoaded
    2. 监听页面DOM加载完毕:给document添加DOMContentLoaded事件
      document.addEventListener('DOMContentLoaded',function(){})
      

3.2 页面滚动事件

  1. 事件名:scroll
  2. 监听整个页面的滚动:
    window.addEventListener('scroll',function(){})
    
  3. 监听某个元素内部的滚动,给某个元素加即可
  4. 获取位置:scrollLeft、scrollTop获取被卷去的大小,可读写
  5. 获取页面的滚动:document.documentElement.scrollTop,可以赋值
  6. 把内容滚动到指定坐标2:元素.scrollTo(x,y)

3.3 页面尺寸事件

  1. 在窗口尺寸改变时触发:resize
    window.addEventListener('resize',function(){})
    
  2. 获取宽高:clientWidth和clientHeight(不包含边框、margin、滚动条等)

4. 元素尺寸与位置

  1. 获取宽高:offsetWidth/offsetHeight

    1. 获取元素的自身宽高,包含元素自身设置的宽高、padding、border
    2. 取出来的是数值
    3. 注意:获取的是可视宽高,如果盒子是隐藏的,获取的是0
      在这里插入图片描述
  2. 获取位置:offsetLeft/offsetTop

    1. 获取元素距离自己最近的具有定位的祖先元素的左、上距离
    2. 注意:offsetLeft 和 offsetTop 是只读属性
  3. 返回元素大小及其相对视口的位置:element.getBoundingClientRect()

相关文章:

js-day7

JS学习之旅-day7 1.事件流1.1 事件流与两个阶段说明1.2 事件捕获1.3 事件冒泡1.4 阻止1.5 解绑事件 2. 事件委托3. 其他事件3.1 页面加载事件3.2 页面滚动事件3.3 页面尺寸事件 4. 元素尺寸与位置 1.事件流 1.1 事件流与两个阶段说明 事件流指的是事件完整执行过程中的流动路…...

【算法训练营Day04】链表part2

文章目录 两两交换链表中的节点删除链表的倒数第 N 个结点链表相交环形链表 II链表总结 两两交换链表中的节点 题目链接:24. 两两交换链表中的节点 算法逻辑: 添加一个虚拟头节点初始化一个交换指针,代表每次交换指针的后两个节点&#xff0…...

【ROS2】各种相关概念汇总解释

包含概念 ROS2自带的标准接口ament_cmake是什么? 标准接口 似乎没有一个确定的名称,就是通俗的叫做“ROS2自带的消息接口” 这些接口存放在 /opt/ros/humble/share 路径下 ament_cmake 是 ROS 2 中基于 CMake 的构建系统 系统越复杂,构…...

解决Vditor加载Markdown网页很慢的问题(Vite+JS+Vditor)

1. 引言 在上一篇文章《使用Vditor将Markdown文档渲染成网页(ViteJSVditor)》中,详细介绍了通过Vditor将Markdown格式文档渲染成Web网页的过程,并且实现了图片格式居中以及图片源更换的功能。不过,笔者发现在加载这个渲染Markdown网页的时候…...

Flowise 本地部署文档及 MCP 使用说明

一、Flowise 简介 Flowise 是一个开源的拖放式 UI 工具,用于构建自定义的 LLM 工作流程。它允许用户通过可视化界面连接不同的 AI 组件,无需编写代码即可创建复杂的 AI 应用。 二、Docker 环境安装 1. 构建 Docker 镜像 docker build -t node22-ubuntu-dev .其中Dockerfi…...

YOLO学习笔记 | 一种用于海面目标检测的多尺度YOLO算法

多尺度YOLO算法用于海面目标检测 核心挑战分析 恶劣天气:雨雾、低光照干扰图像质量波浪干扰:动态背景产生大量噪声多尺度目标:船只(大)、浮标(小)等尺度差异大目标遮挡:波浪导致目标部分遮挡算法原理 多尺度YOLO架构(基于YOLOv5改进): graph TD A[输入图像] --&g…...

鸿蒙5.0项目开发——横竖屏切换开发

横竖屏切换开发 【高心星出品】 文章目录 横竖屏切换开发运行效果窗口旋转配置module.json5的orientation字段调用窗口的setPreferredOrientation方法案例代码解析Index1页面代码:EntryAbility在module.json5的配置信息:Index页面的代码信息&#xff1…...

Triton推理服务器部署YOLOv8(onnxruntime后端和TensorRT后端)

文章目录 一、Trition推理服务器基础知识1)推理服务器设计概述2)Trition推理服务器quickstart(1)创建模型仓库(Create a model Repository)(2)启动Triton (launching triton)并验证是否正常运行(3)发送推理请求(send a inference request)3)Trition推理服务器架…...

TDengine 的 AI 应用实战——电力需求预测

作者: derekchen Demo数据集准备 我们使用公开的UTSD数据集里面的电力需求数据,作为预测算法的数据来源,基于历史数据预测未来若干小时的电力需求。数据集的采集频次为30分钟,单位与时间戳未提供。为了方便演示,按…...

NLP学习路线图(二十一): 词向量可视化与分析

在自然语言处理(NLP)的世界里,词向量(Word Embeddings)犹如一场静默的革命。它将原本离散、难以捉摸的词语,转化为稠密、富含语义的连续向量,为机器理解语言铺平了道路。然而,这些向…...

【分布式技术】KeepAlived高可用架构科普

KeepAlived高可用架构 Keepalived 架构详解一、核心架构组件二、VRRP 协议详解1. **VRRP 核心概念**2. **VRRP 工作流程**3. **VRRP 通信机制** 三、高可用架构模型四、健康检查机制五、配置文件详解配置文件关键参数说明: 六、高可用实现流程七、脑裂问题与解决方案…...

如何配置mvn镜像源为华为云

如何配置mvn镜像源为华为云 # 查找mvn 配置文件 mvn -X help:effective-settings | grep settings.xml# 配置mvn镜像源为华为云,/home/apache-maven-3.9.5/conf/settings.xml文件路径需要根据上一步中查询结果调整 cat > /home/apache-maven-3.9.5/conf/setting…...

Linux平台排查CPU占用高的进程和线程指南

基础排查工具 1. top命令 - 实时进程监控 top操作指令: 按 P:按CPU使用率排序按 1:显示每个CPU核心的使用情况按 H:切换显示线程视图按 M:按内存使用排序按 q:退出 2. htop命令 - 增强版top&#xff08…...

多模态大语言模型arxiv论文略读(105)

UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文标题:UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文作者:Zhaowei…...

简述MySQL 超大分页怎么处理 ?

针对MySQL超大分页(深度分页)的性能问题,核心优化方案如下: 1. ‌子查询 覆盖索引(延迟关联)‌ ‌原理‌: 子查询仅扫描‌覆盖索引‌(如主键),避免回表操作…...

Pyhton中的命名空间包(Namespace Package)您了解吗?

在 Python 中,命名空间包(Namespace Package) 是一种特殊的包结构,它允许将模块分散在多个独立的目录中,但这些目录在逻辑上属于同一个包命名空间。命名空间包的核心特点是:没有 __init__.py 文件&#xff…...

Java设计模式之备忘录模式详解

Java设计模式之备忘录模式详解 一、备忘录模式核心思想 核心目标:捕获对象内部状态并在需要时恢复,同时不破坏对象的封装性。如同游戏存档系统,允许玩家保存当前进度并在需要时回退到之前的状态。 二、备忘录模式类图(Mermaid&am…...

Azure DevOps Server 2022.2 补丁(Patch 5)

微软Azure DevOps Server的产品组在4月8日发布了2022.2 的第5个补丁。下载路径为:https://aka.ms/devops2022.2patch5 这个补丁的主要功能是修改了代理(Agent)二进制安装文件的下载路径;之前,微软使用这个CND(域名为vstsagentpackage.azuree…...

手摸手还原vue3中reactive的get陷阱以及receiver的作用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、实例是什么?二、new Prxoy三、实现代码1.引入代码2.读入数据 总结 前言 receiver不是为解决get陷阱而生,而是为解决Proxy中的this绑…...

小明的Java面试奇遇之互联网保险系统架构与性能优化

一、文章标题 小明的Java面试奇遇之互联网保险系统架构与性能优化🚀 二、文章标签 Java,Spring Boot,MyBatis,Redis,Kafka,JVM,多线程,互联网保险,系统架构,性能优化 三、文章概述 本文模拟了程序员小明在应聘互联网保险系统开发岗位时,参与的一场深…...

C++学习-入门到精通【13】标准库的容器和迭代器

C学习-入门到精通【13】标准库的容器和迭代器 目录 C学习-入门到精通【13】标准库的容器和迭代器一、标准模板库简介1.容器简介2.STL容器总览3.近容器4.STL容器的通用函数5.首类容器的通用typedef6.对容器元素的要求 二、迭代器简介1.使用istream_iterator输入,使用…...

C# 面向对象特性

面向对象编程的三大基本特性是:封装、继承和多态。下面将详细介绍这三大特性在C#中的体现方式。 封装 定义:把对象的数据和操作代码组合在同一个结构中,这就是对象的封装性。 体现方式: 使用访问修饰符控制成员的可见性 通过属…...

ElasticStack技术之logstash介绍

一、什么是Logstash Logstash 是 Elastic Stack(ELK Stack)中的一个开源数据处理管道工具,主要用于收集、解析、过滤和传输数据。它支持多种输入源,如文件、网络、数据库等,能够灵活地对数据进行处理,比如…...

前端与后端

实例一 处理登录页面请求 # 处理登录页面请求 app.route(/c, methods[GET, POST]) # /c是网页地址 def login(): usernameaa passwordbb print(username,password) if request.method POST: username request.form.get(yhm) password requ…...

CI/CD 持续集成、持续交付、持续部署

CI/CD 是 持续集成(Continuous Integration) 和 持续交付/持续部署(Continuous Delivery/Deployment) 的缩写,代表现代软件开发中通过自动化流程快速、可靠地构建、测试和发布代码的实践。其核心目标是 减少人工干预、…...

代码随想录60期day54

岛屿dfs #include<iostream> #include<vector> using namespace std;int dir[4][2] {0,1,1,0,-1,0,0,-1};void dfs(const vector<vector<int>>&grid,vector<vecotr<bool>>&visited,int x,int y){for(int i 0 ; i < 4; i){in…...

关于easyx头文件

一、窗口创建 &#xff08;1&#xff09;几种创建方式 #include<easyx.h>//easyx的头文件 #include<iostream> using namespace std;int main() {//创建一个500*500的窗口//参数为&#xff1a;长度&#xff0c;宽度&#xff0c;是否显示黑框&#xff08;无参为不…...

Java 中执行命令并使用指定配置文件的最佳实践

在Java开发中&#xff0c;有时需要从Java应用程序中执行系统命令&#xff0c;并使用指定的配置文件来控制这些命令的行为。本文将详细介绍在Java中执行命令并使用指定配置文件的最佳实践&#xff0c;包括如何设置环境变量、重定向输入输出以及处理可能出现的异常。 一、基本实…...

django入门-orm数据库操作

一&#xff1a;下载数据库依赖项mysqlclient pip install mysqlclient 二&#xff1a;django配置文件配置数据库链接 路径&#xff1a;mysite2\mysite2\settings.py DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: data, # 数据库名称USER: root, …...

​​食品电商突围战!品融电商全平台代运营,助您抢占天猫京东抖音红利!

​​食品电商突围战&#xff01;品融电商全平台代运营&#xff0c;助您抢占天猫京东抖音红利&#xff01;​​ ​​一、食品电商的黄金时代&#xff1a;机遇与挑战并存​​ 随着消费升级和线上渗透率的持续攀升&#xff0c;食品行业正迎来前所未有的发展机遇。2023年&#xff…...