分享好友 最新动态首页 最新动态分类 切换频道
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定位住


最新文章
淄川SEO整站优化,全面提升网站排名与用户满意度
淄川SEO整站优化服务,旨在全面提升网站在搜索引擎中的排名及用户访问体验,通过综合策略优化网站结构、内容与外部链接,实现网站在搜索引擎结果中的高效展示和用户访问的便捷优化。随着互联网的快速发展,网站已经成为企业展示自身形象、
演绎“后武侠”
《天龙八部之宿敌》,许嵩为大型网络游戏《天龙八部3》谱写的游戏主题曲,歌曲于2011年9月20日发布。 如果说《断桥残雪》是表达一种情绪,《清明雨上》是一种情感,《半城烟沙》是一种情操,那《宿敌》则可看作一种情怀。字里行间里流淌的
摩登天使商家版软件 1.1.2
没有加固或未知加固INTERNET访问网络连接,可能产生GPRS流量WRITE_EXTERNAL_STORAGE允许程序写入外部存储,如SD卡上写文件ACCESS_NETWORK_STATE获取网络信息状态,如当前的网络连接是否有效ACCESS_WIFI_STATE获取当前WiFi接入的状态以及WLA
诗词已解“怀素身长五尺四祢生词赋抛江夏”代表什么动物最新热门
生肖字谜诗怀素才情深似海身长五尺四传扬。祢生词赋如蛇舞智慧灵性显光芒。抛却凡尘如江夏生肖之谜隐其中。五尺身躯藏玄机蛇影藏于热门词。诗解:此诗以怀素的才情开始暗指生肖中的蛇象征智慧与灵性。五尺身躯暗示龙的雄伟但结合整体语境更
揭秘花茶前十大品种排名!了解花茶的世界,让你不再茶饮白痴!
花茶,作为一种别具特色的茶类,蕴含着丰富的文化底蕴和独特的品味体验。它不同于传统的茶叶,将茶叶与花朵巧妙融合,赋予茶饮以花香的独特韵味,给人带来耳目一新的感受。这种独特的制作工艺和口感特点,引发了人们对其品种排名的好奇心理
seo伪原创违法吗(seo伪原创 有用吗)
大家好,今天小编关注到一个比较有意思的话题,就是关于seo伪原创违法吗的问题,于是小编就整理了3个相关介绍seo伪原创违法吗的解答,让我们一起看看吧。SEO靠采集站赚钱现在还行不行?百中搜优化靠谱吗?伪原创文章要怎么写?现在的话靠采
用Linux云服务器搭建网站,看这一篇就够了!
搭建网站,很多人会选择手动搭建,或者直接选购镜像,一键部署网站。如果需要将网站发布到网络并对用户提供访问服务,则还需进行注册域名、网站备案、域名解析。 如果有小伙伴对这类内容有兴趣,留言区举手&
高清屏幕设计_今日电脑高清屏幕设计教程
摘要:高清屏幕设计,今日电脑高清屏幕设计教程,新片场素材小编罗雯菲高清屏幕设计,今日电脑高清屏幕设计教程相关内容整理,如果您对高清屏幕设计,今日电脑高清屏幕设计教程感兴趣欢迎访问免费阅读。高清屏幕设计,今日电脑高清屏幕设计教程
相关文章
推荐文章
发表评论
0评