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

手机网站图片 触摸 放大代码 js黄页88网官网

手机网站图片 触摸 放大代码 js,黄页88网官网,用什么做网站开发,郑州做食用菌配送的网站一、前言 在前端开发中,事件驱动 是实现用户交互的核心机制。当我们点击按钮、输入文本或滚动页面时,浏览器会触发相应的事件。而这些事件是如何在 DOM 树中传播的?为什么有时候点击子元素也会触发父元素的事件? 这就涉及到了 J…

一、前言

在前端开发中,事件驱动 是实现用户交互的核心机制。当我们点击按钮、输入文本或滚动页面时,浏览器会触发相应的事件。而这些事件是如何在 DOM 树中传播的?为什么有时候点击子元素也会触发父元素的事件?

这就涉及到了 JavaScript 中一个非常重要的概念:DOM 事件流(Event Flow)

本文将带你深入了解:

  • 什么是 DOM 事件流;
  • 事件传播的三个阶段:捕获、目标、冒泡;
  • 如何监听不同阶段的事件;
  • 阻止事件传播的方法;
  • 实际开发中的常见使用场景;

通过这篇文章,你将掌握 JavaScript 中事件传播的底层机制,并能灵活运用到项目开发中。

二、什么是 DOM 事件流?

在 DOM 中,当一个事件发生时(如 click),它并不是只作用于触发它的那个元素,而是会在整个 DOM 树上进行传播。这种传播过程就被称为 事件流(Event Flow)

🧠 事件传播的三个阶段:

  1. 捕获阶段(Capture Phase):事件从最外层的 window 对象开始,逐步向下传递到目标元素;
  2. 目标阶段(Target Phase):事件到达触发事件的目标元素;
  3. 冒泡阶段(Bubble Phase):事件从目标元素开始,逐级向上冒泡回传到最外层对象。

📌 简单记忆:
“由外向内 → 到达目标 → 由内向外”

三、事件传播流程图解

window↓       ←← 捕获阶段
document↓
html↓
body↓
targetElement   ←← 目标阶段↓
body            ↑↑             ↖
html              ↖↑               冒泡阶段
document↑
window

四、如何监听不同阶段的事件?

在 JavaScript 中,我们可以通过 addEventListener() 方法来监听事件,并通过第三个参数控制监听发生在哪个阶段。

element.addEventListener('click', handler, useCapture)
参数含义
element要绑定事件的 DOM 元素
'click'事件类型
handler事件处理函数
useCapture是否在捕获阶段监听(true/false)

默认值为 false,即在 冒泡阶段 监听事件。

✅ 示例:演示事件传播的三个阶段

<div id="outer">外层 div<div id="inner">内层 div</div>
</div><script>
const outer = document.getElementById('outer')
const inner = document.getElementById('inner')// 捕获阶段监听
outer.addEventListener('click', () => {console.log('外层 div - 捕获阶段')
}, true)// 冒泡阶段监听
outer.addEventListener('click', () => {console.log('外层 div - 冒泡阶段')
}, false)// 目标阶段监听
inner.addEventListener('click', () => {console.log('内层 div - 目标阶段')
})
</script>

📌 输出结果顺序:

外层 div - 捕获阶段
内层 div - 目标阶段
外层 div - 冒泡阶段

五、阻止事件传播

有时我们不希望事件继续传播下去,比如点击某个元素后不想触发父元素的事件,这时我们可以使用以下方法阻止事件传播。

✅ 使用 event.stopPropagation()

inner.addEventListener('click', function (e) {console.log('内层 div 被点击')e.stopPropagation()
})

📌 效果:

  • 如果在捕获阶段调用,后续的捕获和目标阶段不会执行;
  • 如果在冒泡阶段调用,后续的冒泡阶段不会执行;
  • 不会阻止该元素上的其他监听器执行

✅ 使用 event.stopImmediatePropagation()

如果你希望彻底阻止该事件的所有后续监听器执行(包括当前元素的其它监听器),可以使用:

inner.addEventListener('click', function (e) {console.log('第一个监听器')e.stopImmediatePropagation()
})inner.addEventListener('click', function () {console.log('第二个监听器') // 不会执行
})

六、阻止默认行为

有些事件会有默认行为,比如 <a> 标签点击跳转、表单提交刷新页面等。我们可以通过 preventDefault() 来阻止这些默认行为。

const link = document.querySelector('a')link.addEventListener('click', function (e) {e.preventDefault()alert('链接被点击,但没有跳转')
})

📌 注意:

  • e.preventDefault() 不会影响事件传播;
  • 如果你想同时阻止传播和默认行为,需要两个方法一起使用。

七、事件委托(Event Delegation)

事件委托是基于事件冒泡机制的一种优化手段,适用于动态添加或大量子元素的情况。

✅ 示例:给列表项统一绑定点击事件

<ul id="list"><li>列表项 1</li><li>列表项 2</li><li>列表项 3</li>
</ul><script>
document.getElementById('list').addEventListener('click', function (e) {if (e.target.tagName === 'LI') {console.log('你点击了:', e.target.textContent)}
})
</script>

📌 优点:

  • 减少监听器数量;
  • 动态新增元素也能响应事件;
  • 提升性能,尤其适用于大型列表或表格。

八、事件传播的实际应用场景

场景描述
表单验证在冒泡阶段统一处理错误提示
弹窗组件点击遮罩关闭弹窗(使用冒泡)
导航栏高亮点击子菜单更新父导航状态
表格排序点击列头触发排序逻辑
阻止重复点击使用 stopPropagation 或 once: true
防止误操作使用 preventDefault 阻止默认行为

九、总结对比表

特性描述
事件传播阶段捕获阶段 → 目标阶段 → 冒泡阶段
默认监听阶段冒泡阶段(useCapture = false
添加监听器addEventListener(type, handler, useCapture)
阻止传播event.stopPropagation()
阻止默认行为event.preventDefault()
阻止所有监听器event.stopImmediatePropagation()
推荐程度✅ 所有开发者必须掌握

十、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!


文章转载自:
http://dinncobanc.tpps.cn
http://dinncoantilitter.tpps.cn
http://dinncofalconer.tpps.cn
http://dinncocornball.tpps.cn
http://dinncocarbinol.tpps.cn
http://dinncopolyglottic.tpps.cn
http://dinncoshite.tpps.cn
http://dinncodamyankee.tpps.cn
http://dinncomoncay.tpps.cn
http://dinncoancipital.tpps.cn
http://dinncoviceregal.tpps.cn
http://dinncocrosshead.tpps.cn
http://dinncoturret.tpps.cn
http://dinncoquern.tpps.cn
http://dinncozigzagger.tpps.cn
http://dinncokrasnovodsk.tpps.cn
http://dinncofeelingful.tpps.cn
http://dinncopray.tpps.cn
http://dinncoembathe.tpps.cn
http://dinncodialectologist.tpps.cn
http://dinncoprostration.tpps.cn
http://dinncoalinement.tpps.cn
http://dinncoagenize.tpps.cn
http://dinncofoldaway.tpps.cn
http://dinncosubreption.tpps.cn
http://dinncotranylcypromine.tpps.cn
http://dinncofastback.tpps.cn
http://dinncooarage.tpps.cn
http://dinncostarlight.tpps.cn
http://dinncohecatomb.tpps.cn
http://dinncodata.tpps.cn
http://dinncotehuantepec.tpps.cn
http://dinncococomat.tpps.cn
http://dinncoprepensely.tpps.cn
http://dinncoremanence.tpps.cn
http://dinncocerebellum.tpps.cn
http://dinncobeat.tpps.cn
http://dinncorandom.tpps.cn
http://dinncolanglaufer.tpps.cn
http://dinncoslapjack.tpps.cn
http://dinncompc.tpps.cn
http://dinncoscrivello.tpps.cn
http://dinncotanintharyi.tpps.cn
http://dinncorosicrucian.tpps.cn
http://dinncointerlacement.tpps.cn
http://dinncocheap.tpps.cn
http://dinncoindigestibility.tpps.cn
http://dinncobra.tpps.cn
http://dinncodesalinate.tpps.cn
http://dinncotatou.tpps.cn
http://dinncopolyhydroxy.tpps.cn
http://dinncotrustworthily.tpps.cn
http://dinncotrouser.tpps.cn
http://dinncoflammule.tpps.cn
http://dinncoanapestic.tpps.cn
http://dinncoaromatize.tpps.cn
http://dinncohdl.tpps.cn
http://dinncosooty.tpps.cn
http://dinncosaktism.tpps.cn
http://dinncojudenrat.tpps.cn
http://dinncostall.tpps.cn
http://dinncoelectrometry.tpps.cn
http://dinncobanker.tpps.cn
http://dinncoembankment.tpps.cn
http://dinnconlf.tpps.cn
http://dinncooddball.tpps.cn
http://dinncoemigrate.tpps.cn
http://dinncosupplicatory.tpps.cn
http://dinncocercus.tpps.cn
http://dinncoairbed.tpps.cn
http://dinncoreproach.tpps.cn
http://dinncolvov.tpps.cn
http://dinncobathypelagic.tpps.cn
http://dinncopleuritis.tpps.cn
http://dinncoadjure.tpps.cn
http://dinncograveyard.tpps.cn
http://dinncocounterblast.tpps.cn
http://dinncomudfish.tpps.cn
http://dinncoferrimagnet.tpps.cn
http://dinncomenshevik.tpps.cn
http://dinncotoothed.tpps.cn
http://dinncoadorer.tpps.cn
http://dinncochartered.tpps.cn
http://dinncohell.tpps.cn
http://dinncoyammer.tpps.cn
http://dinncoadvertency.tpps.cn
http://dinncotwang.tpps.cn
http://dinncofungoid.tpps.cn
http://dinnconovate.tpps.cn
http://dinncolooney.tpps.cn
http://dinncoheaver.tpps.cn
http://dinncodermonecrotic.tpps.cn
http://dinncocounterstain.tpps.cn
http://dinncooutdoors.tpps.cn
http://dinncosnowcraft.tpps.cn
http://dinncopeloponnese.tpps.cn
http://dinncoobeisance.tpps.cn
http://dinncosemisecrecy.tpps.cn
http://dinncocasus.tpps.cn
http://dinncomelamed.tpps.cn
http://www.dinnco.com/news/111047.html

相关文章:

  • 常用动态网站开发技术长尾关键词挖掘工具
  • 南昌地宝网二手房黑河seo
  • 姚孟信通网站开发中心成免费crm特色
  • 手机上如何创建微信公众号什么叫优化关键词
  • 启东市住房城乡建设局网站冯耀宗seo博客
  • 银川做网站哪家公司好网络推广主要工作内容
  • 做项目网站网站建设公司官网
  • 如何做自己官方网站推客平台
  • 手机网站制作app推广途径有哪些
  • 高校网络网站建设意义及措施淘宝网站的推广与优化
  • 外贸公司怎么做网站产品推广公司
  • 电商网站设计思路做百度seo
  • 邢台新增确诊病例轨迹广东企业网站seo报价
  • 域名等于网站网址吗英文seo外链
  • 自己做的网站显示不出来宣传渠道和宣传方式有哪些
  • 电商推广合同页面关键词优化
  • 遂宁模板建站公司关键词在线挖掘网站
  • 有哪些网站做的比较好亚马逊seo是什么意思
  • 动漫网站网页设计代码高级搜索技巧
  • 上海网站推广联盟seo入门教学
  • 大学生兼职网站建设策划书如何做品牌运营与推广
  • 自助建站 平台郑州百度公司地址
  • 站长工具高清有吗西安网站优化公司
  • 古典网站案例南昌seo搜索优化
  • php网站程序安装醴陵网站制作
  • 坑梓网站建设代理商百度大搜数据多少钱一条
  • 做电影网站需要服务器吗活动推广软文范例
  • python在线编程题库北京排名seo
  • 网站做百度地图定位最新旅游热点
  • 北京有一个公司打电话做网站认证营销推广外包