news 2026/7/28 19:42:53

JavaScript-事件-BOMDOM

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript-事件-BOMDOM

JavaScript-事件-BOM&DOM

事件(Event)

事件概述

javascript是一门事件驱动型语言,通常服务于html页面中,对于html页面中的元素必然会存在一些动作,这些动作的触发,称之为事件驱动。

事件分类

  • 浏览器窗体事件

    事件名描述
    onload当窗体内容被加载时触发
    onunload当窗体中内容卸载时触发
    onbeforeunload当窗体内容被卸载之前触发
    onresize当窗体大小被改变时出发
  • 鼠标事件

    事件名描述
    onclick当鼠标单击时触发
    ondblclick当鼠标双击时触发
    onmouseover当鼠标悬停到元素上时触发
    onmouseout当输入从元素中移出时触发
    onmouseenter当鼠标进入时触发
    onmouseleave当鼠标离开时触发
    onmousedown当鼠标按下时触发
    onmouseup当鼠标抬起时触发
  • 键盘事件

    事件名描述
    onkeydown当键盘按键被按下时触发
    onkeyup当键盘按键抬起触发
    onkeypress当键盘按键被按压时触发
  • 表单事件

    事件名描述
    onchange当控件内容改变时触发
    onselect当控件内容被选中时触发
    onblur当控件失去焦点时触发
    onfocus当控件获得焦点时触发
    onreset表单重置时触发
    onsubmit表单提交时触发

事件使用方式

1. 直接在元素上使用onXXX属性设置事件
<buttononclick="btnClick()">按钮</button>
2. 通过DOM对象为元素绑定事件(常见)
<buttonid="btn">按钮</button><script>varbtn=document.getElementById('btn'); btn.addEventListener('click',function(){//do...})</script>
3.通过DOM对象获取元素后设置事件函数
<buttonid="btn">按钮</button><buttonid="btn2">按钮</button><script>varbtn=document.getElementById('btn'); btn.onclick=function(){//do...}varbtn2=document.getElementById('btn2'); btn2.onclick=btnClick;functionbtnClick(){//do...}</script>

事件流(事件冒泡和事件捕获)

​ 事件流描述的是从页面中接受事件的顺序,但有意思的是,早期的微软(IE)和网景(Netscape)开发团队居然提出了两个截然相反的事件流概念,IE的事件流是事件冒泡流(event bubbling),而Netscape的事件流是事件捕获流(event capturing)。

事件冒泡

事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止;事件冒泡是一个由内向外触发的过程,当通过元素的addEventListener方法绑定事件时,默认使用不给第三个参数(默认值为false)时,此时事件为冒泡机制。

举例说明:

<!DOCTYPE html><html><head><metacharset="utf-8"><title></title><style>#box1{position:relative;top:0;left:0;width:500px;height:500px;background-color:#f00;}#box2{position:absolute;left:100px;top:100px;width:300px;height:300px;background-color:#0f0;}#box3{position:absolute;left:100px;top:100px;width:100px;height:100px;background-color:#00f;}</style></head><body><divid="box1">box1<divid="box2">box2<divid="box3">box3</div></div></div><script>varbox1=document.getElementById('box1');varbox2=document.getElementById('box2');varbox3=document.getElementById('box3');box1.addEventListener('click',function(e){console.log('box1 click')})box2.addEventListener('click',function(){console.log('box2 click')})box3.addEventListener('click',function(e){console.log('box3 click');})</script></body></html>
事件捕获

事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止;事件捕获是一个由外向内的触发过程,当通过元素的addEventListener方法绑定事件时,如果将函数的第三个参数设置为true,则事件冒泡会转为事件捕获。

举例说明:

<!DOCTYPE html><html><head><metacharset="utf-8"><title></title><style>/*略*/</style></head><body><divid="box1">box1<divid="box2">box2<divid="box3">box3</div></div></div><script>varbox1=document.getElementById('box1');varbox2=document.getElementById('box2');varbox3=document.getElementById('box3');box1.addEventListener('click',function(e){console.log('box1 click')},true)box2.addEventListener('click',function(){console.log('box2 click')},true)box3.addEventListener('click',function(e){console.log('box3 click');},true)</script></body></html>
阻止事件冒泡

通过以上例子可以看出,事件冒泡和事件捕获都会导致事件的同时执行,如何避免事件的传播呢?因此我们可以使用以下方式实现:

  • event.cancelBubble = true
  • event.stopPropagation()
varbox1=document.getElementById('box1');varbox2=document.getElementById('box2');varbox3=document.getElementById('box3');box1.addEventListener('click',function(e){console.log('box1 click')})box2.addEventListener('click',function(){console.log('box2 click')})box3.addEventListener('click',function(e){console.log('box3 click');//阻止事件传播1// e.stopPropagation();//阻止事件冒泡2// e.cancelBubble = true;})

BOM对象

BOM(Browser Object Model),浏览器对象模型,与所使用的浏览器直接相关的一些内置对象,目前浏览器的内核一般两个:(webkit,gecko);BOM通常包含以下几个常见的内置对象

  1. Window
    1. Screen
    2. Location
    3. Navigator
    4. History
    5. Document

window对象

window对象提供的弹窗组件:

  • open:打开一个新窗口
  • alert:打开警告框
  • confirm:打开确认框
  • prompt:打开消息输入框

screen对象

screen表示屏幕信息,通过screen可以获取屏幕大小以及实际可用高宽(以像素为单位),常用属性有以下:

  • width:获取屏幕宽度
  • height:获取屏幕高度
  • availWidth:可用宽度(减去状态栏宽度(侧边))
  • availHeight:可用高度(减去状态栏高度(底部))

location对象

location对象表示当前页面的url地址信息,一个完整的URL地址如下:

http://www.example.com:8080/path/index.html?a=1&b=2#TOP

可以用 location.href 获取。要获得URL各个部分的值,可以这么写:

location.protocol;// 'http'location.host;// 'www.example.com'location.port;// '8080'location.pathname;// '/path/index.html'location.search;// '?a=1&b=2'location.hash;// 'TOP'

history对象

history 对象保存了浏览器的历史记录,JavaScript可以调用 history 对象的 back() 或 forward () ,相当于用

户点击了浏览器的“后退”或“前进”按钮。

这个对象属于历史遗留对象,对于现代Web页面来说,由于大量使用AJAX和页面交互,简单粗暴地调用

history.back() 可能会让用户感到非常愤怒。

新手开始设计Web页面时喜欢在登录页登录成功时调用 history.back() ,试图回到登录前的页面。这是一种错误

的方法。

任何情况,你都不应该使用 history 这个对象了。

DOM对象

DOM(Document Object Model),文档对象模型,将html网页中的所有的元素当做一个对象进行操作,可以通过document对象操作指定元素的属性以及行为(函数);HTML中将整个网页文档当做一颗倒置的文档树来理解

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 19:42:10

CCF 201712-4 行车路线

目录思路DFS实现代码运行样例截图BFS实现代码目前我的程序提交只能得20分&#xff0c;我没发现哪有问题&#xff0c;看了好多博客下面提出的一些测试点也都能跑正确&#xff0c;请发现问题的小伙伴跟我讨论讨论指明一下&#xff0c;谢谢&#xff01; 思路 按深度优先搜索的思…

作者头像 李华
网站建设 2026/7/28 19:40:40

【笔试题目整理】 网易2018校园招聘数据分析师笔试卷

最近在准备数据分析岗位的笔试&#xff0c;整理了牛客网上的一些试题与答案方便查看。 试卷信息&#xff1a; 客观题&#xff1a;单选20道 主观题&#xff1a;问答1道,编程2道 完成时间&#xff1a; 120分钟 难度系数&#xff1a; 三颗星 总分&#xff1a; 100分 注&#…

作者头像 李华
网站建设 2026/7/28 19:39:35

RF-DETR + ByteTrack 多目标跟踪实战:命令行与 Python 两种流程

RF-DETR ByteTrack 多目标跟踪实战&#xff1a;命令行与 Python 两种流程 这篇教程根据我复现 ByteTrack 多目标跟踪流程时整理&#xff0c;重点演示示例视频准备、命令行跟踪、Python 回调处理和运动补偿轨迹可视化。 本文整理自我的学习和项目复现过程&#xff0c;尽量按实…

作者头像 李华
网站建设 2026/7/28 19:36:20

11. Container With Most Water 盛最多水的容器

原题链接&#xff1a;https://leetcode.com/problems/container-with-most-water/ 找出在n条垂直于x轴的线中能够组成的最大容器面积的两条线&#xff0c;容器不能倾斜&#xff0c;n的最小值为2. 解题思路&#xff1a; 1.暴力破解 设起始点为i&#xff0c;终点为j&#xff0c;找…

作者头像 李华
网站建设 2026/7/28 19:30:11

AI如何重塑应用开发:从传统App到智能体的技术转型与实践指南

这次我们来看一个关于“AI将会取代90%的app”的讨论。这不是一个具体的开源项目&#xff0c;而是一个正在发生的技术趋势和行业预测。核心观点是&#xff0c;随着AI大模型能力的增强&#xff0c;特别是智能体&#xff08;AI Agent&#xff09;和自然语言交互的成熟&#xff0c;…

作者头像 李华