分享好友 最新动态首页 最新动态分类 切换频道
6.2 JavaScript Apis - 事件流
2024-12-27 02:38

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

事件流分为两种,第一种是捕获,第二种是冒泡

捕获可以看做是从大了往小了,冒泡可以看做是从小的往大的

说明:假设页面里面有一个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段

捕获阶段是从父到子,冒泡阶段是从子到父

实际工作都是使用事件冒泡为主

从DOM的根元素开始去执行对应的事件(从外到里

事件捕获需要写对应的代码才能看到效果

 

addEventListener第三个参数传入true代表是捕获阶段触发,但是这种情况很少使用

若使用L0事件监听,则只有冒泡阶段,没有捕获

效果:当我们点击紫色的div框(son)的时候,会依次执行爷爷、爸爸、儿子,这个其实就是事件流动,事件的捕获。这些盒子绑定的事件会依次执行

 
 

实际工作是以冒泡为主

当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中一次被触发。这一个过程被称为事件冒泡

默认情况下,冒泡一定会发生的,只不过之前发生的时候我们没有看到任何的效果

下面这种情况,就是事件冒泡

正好与事件捕获反着来,依次执行儿子、爸爸、爷爷

 
 

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

父级都会执行一次同名的事件类型操作

比如儿子执行的是click事件,那爸爸、爷爷也会执行click事件

L2事件监听第三个参数时false,或者默认都是冒泡

有时候冒泡并不好,我们要进行阻止冒泡。

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

需求:若想把事件限制在当前元素内,就需要阻止事件冒泡

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

语法

 

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

示例

 
 
  • L0 on事件方式,直接使用null覆盖就可以实现事件的解绑

语法

 

我们现在很少用这种事件绑定方式了

  • **L2 addEventListener事件解绑方式 **
 

注意!匿名函数无法被解绑

我们在某些情况下,需要阻止默认行为的发生,比如阻止链接的跳转或者表单域跳转等

语法

 
 
 
 

事件冒泡有一个非常好的用途,就是事件委托,事件委托其实是一种技巧

事件委托是利用事件流的特征解决一些开发需求的知识技巧

优点:减少注册次数,提高程序性能

原理:事件委托其实是利用事件冒泡的特点

给父元素注册事件,当我们触发子元素的时候,会冒泡到父元素身上,从而触发父元素的事件

如果同时给多个元素注册事件,我们之前使用的是for循环注册事件,那有没有一种技巧注册一次事件就能完成以上效果呢

我们点击的li,但是li上没有真正的点击事件,此时会事件冒泡到父级元素ul上,ul上会有点击事件

 

效果如下图所示

需求:优化程序,将tab切换案例改为事件委托写法

tab栏的事件委托,我们委托给ul即可

 
 
 

3.1.1 load 事件

加载外部资源(如图片、外联CSS、JavaScript等,加载完毕时触发的事件

我们目前是把JavaScript的代码写在了body标签的最底部,但是其实也可以写在head标签中

  • 事件名:load

  • 监听页面所有资源加载完毕

给window添加load事件(window代表着整个窗口

最大的事window,其次是document

 
  • 注意!不光可以监听整个页面资源加载完毕,也可以针对某个资源绑定load事件

等待某个图片加载完成后,就会执行回调函数

 

3.1.2 DOMContentLoaded

当初始的HTML文档被完全加载和解析完成后,DOMContentLoaded事件被触发,而无需等待样式表、图像等完全加载

load是监听整个页面资源,是给window加的,一定不要混淆

监听页面DOM加载完毕:给document添加DOMContentLoaded事件

 
 

或者说是元素滚动事件

滚动条在滚动的时候,持续触发的事件

很多网页需要检测用户把页面滚动到某一区域后做一些处理,比如固定导航栏,比如返回顶部

事件名:scroll

监听整个页面的滚动

 

给window或document添加scroll事件,我们一般是给window

我们也可以单独监听某个元素内部滚动,直接给某个元素加即可

 
  • 使用场景

滚动一段距离,让某些元素显示或者高亮等

可以使用scroll来检测滚动的距离scrollLeft和scrollTop属性

使用其两个属性,能够获取被卷去的大小

获取元素内容往左往上滚出去看不到的距离

这两个值是可读写的

一定要是数值型的

竖着的长方体是内容,横着的代表是范围框,红色标出的长度就是scrollTop

 
 

也能对整个页面进行滚动事件

开发中,我们经常检测页面滚动的距离,比如页面滚动100像素就可以显示某个元素或者固定某一个元素

初始化的时候没有显示,当整个页面的顶部像素卷入超过100px后,div会展示出来

 

3.2.1 滚动显示侧边栏、

当页面滚动大于300像素,就显示电梯导航

红色框中的内容就是电梯导航

 

3.2.2 快速回顶部

添加一个点击事件,让scrollTop=0即可

 

3.2.3 scrollTo()

scrollTo()方法可把内容滚动到指定的坐标

 
 
 
  • 会在窗口尺寸改变的时候触发事件resize
 
  • 检测屏幕宽度clientWidth、clientHeight属性

获取元素的可见部分宽高,不包含边框、margin、滚动条等

 
  • 页面尺寸于位置-尺寸

获取位置 element.getBoundingClientRect()

方法返回元素的大小及相对于视口的位置

当我们的盒子顶部隐藏了一部分后,top的值就变成负的了

我想要得到我这个盒子再页面中是多大的,并且能够知道他的位置

前面的案例滚动多少距离使我们自己算的,但是我们想页面滚动到某个元素,就可以做某些事情

简单的说,我们想通过js的方式,得到元素在页面中的位置

这样我们做页面滚动到某个具体位置执行具体的操作了,省了我们计算距离这一步,方便了一点

  • 获取宽高offsetWidth、offsetHeight

获取元素的自身的宽高、包含元素自身设置的宽高、padding、border

获取出来的是数值,方便计算

注意!获取的是可视宽高,如果盒子是隐藏的,获取的结果是0

电梯导航栏就可以做下面的修改

这样就不用担心盒子上移和下移的问题

 
  • 获取位置

获取元素距离自己定位父级元素的左、上距离,会受父级元素的影响

检测盒子的位置,最近一级带有定位的父级/祖先级元素

offsetLeft和offsetTop等注意是只读属性

 

给div定位住


最新文章
成品网站1.1.719:10分钟打造你的专属平台,原来建站竟然如此简单!
你想要拥有一个高端、精美、实用的网站?但繁琐的建站过程、昂贵的开发费用和专业技能的缺乏总让人头疼。其实,搭建网站也能像组装乐高一样简单有趣!成品网站1.1.719就是一款能快速帮你实现梦想的网站构建工具。这款神器就像一个建站百宝箱
剧本写作生成器app免费
剧本写作生成器app是一款免费的智能剧本生成软件。操作较为简单,用户只需简单描述角色的性格、外貌、背景等基本信息,AI就能快速生成人物形象,输入关键词即可生成各类剧本,涵盖悬疑推理、浪漫爱情等多种类型。在软件主页点击特定位置可
手机刷机怎么刷
手机刷机,是指通过特定的工具和步骤,为手机重新安装或升级操作系统,以达到优化性能、解锁新功能或解决系统问题的目的。以下是详细的刷机步骤及注意事项,帮助用户顺利完成刷机过程。### 一、刷机前的准备工作1. **备份数据**:刷机会清
开源抖音卡片系统源码 抖音跳转微信卡片外链系统安装教程
抖音内嵌的卡片通常是为了引导用户完成某种操作,比如关注、访问外部链接等。如果你想让抖音内的卡片直接跳转到微信的二维码页面,这通常是通过内置的分享功能或者集成第三方服务来实现的。1. **官方分享功能**:抖音提供了API供开发者定制
高清美女写真:AI绘画神器让你一键生成惊艳美图
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个看脸的时代,美容自拍和写真已经成为许多年轻人的日常。然而,想要拍出令人惊艳的美女
解放品区·年度词
转自:上观新闻1一整年,徐汇都不缺重磅科技盛会。3月下旬,徐汇接连两个周末举办了2024全球开发者先锋大会、首届中国具身智能大会;7月,连续第七年承办世界人工智能大会;12月初,2024科创大会,徐汇密集举办近10场分论坛。这些分论坛的
网易云外链规划师:提升网站知名度和搜索引擎排名
简介在当今竞争激烈的在线环境中,建立有效的网站外链对于提高知名度、吸引流量和改善搜索引擎排名至关重要。网易云分享外链是一个绝佳的机会,可以利用这个流行平台的力量来获得这些优势。本计划概述了为网易云分享外链建立全面的外链建设
朗玛信息:招商证券投资者于12月10日调研我司
证券之星消息,2024年12月10日朗玛信息(300288)发布公告称招商证券顾佳 刘晓珊于2024年12月10日调研我司。具体内容如下:问:公司进行医学人工智能大模型的产品研发的优势有哪些?答:公司从 2014年起深耕互联网医疗领域,旗下“39健康网
淄川SEO整站优化,全面提升网站排名与用户满意度
淄川SEO整站优化服务,旨在全面提升网站在搜索引擎中的排名及用户访问体验,通过综合策略优化网站结构、内容与外部链接,实现网站在搜索引擎结果中的高效展示和用户访问的便捷优化。随着互联网的快速发展,网站已经成为企业展示自身形象、
演绎“后武侠”
《天龙八部之宿敌》,许嵩为大型网络游戏《天龙八部3》谱写的游戏主题曲,歌曲于2011年9月20日发布。 如果说《断桥残雪》是表达一种情绪,《清明雨上》是一种情感,《半城烟沙》是一种情操,那《宿敌》则可看作一种情怀。字里行间里流淌的
相关文章
推荐文章
发表评论
0评