JS-事件

事件是在编程时系统内发生的动作或者发生的事情

事件监听(绑定)

事件监听就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为绑定事件或者注册事件

元素对象.addEventListener('事件类型',要执行的函数)

事件监听三要素:

1)事件源:哪个dom元素被事件触发了,要获取dom元素

2)事件类型:用什么方式触发

3)事件调用的函数:要做什么事

事件监听版本

DOM L0:传统on注册

事件源.on事件=function(){}

1)只有冒泡没有捕获

2)同一个对象,后面注册的事件会覆盖前面注册(同一个事件)

3)都是冒泡阶段执行的

DOM L2:事件监听注册

事件源.addEventListener(事件类型,事件处理函数,是否使用捕获)

1)既可以做冒泡,也可以做捕获

2)后面注册的事件不会覆盖前面注册的事件(同一个事件)

3)可以通过第三个参数去确定是在冒泡或者捕获阶段执行

区别:

on方式会被覆盖,addEventListener方式可绑定多次,拥有事件更多特性,推荐使用

事件类型

鼠标经过事件的区别:

1)mouseover和mouseout会有冒泡效果

2)mouseenter和mouseleavet没有冒泡效果(推荐)

事件对象

事件对象也是个对象,这个对象里有事件触发时的相关信息;例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息

使用场景:

1)可以判断用户按下哪个键,比如按下回车键可以发布新闻

2)可以判断鼠标点击了哪个元素,从而做相应的操作

获取事件对象

事件对象常用属性

参考资料:MDN Web Docs

事件流

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

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

简单来说:捕获阶段是从父到子;冒泡阶段是从子到父

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

事件捕获

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

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

DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)

说明:

1)addEventListener第三个参数传入true代表是捕获阶段触发(很少使用)

2)若传入false代表冒泡阶段触发,默认是false

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

事件冒泡

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

1)简单理解:当一个元素触发事件后,会依次向上调用所有父级元素的同名事件

2)事件冒泡是默认存在的

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

阻止冒泡

阻止事件冒泡
事件对象.stopPropagation()//阻止事件冒泡

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

阻止默认行为

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

e.preventDefault()//链接的跳转,表单域跳转

解绑事件

on事件方式

直接使用null覆盖偶就可以实现事件的解绑

addEventListener方式

必须使用:removeEventListener(事件类型,事件处理函数,[获取捕获或者冒泡阶段])

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

事件委托

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

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

原理:事件委托其实是利用事件冒泡的特点;事件委托给了父元素

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

实现:事件对象.target.tagName可以获得真正触发事件的元素(大写)

其他事件

页面加载事件

1.加载外部资源(如图片、外联CSS和Javascript等)加载完毕时触发的事件

事件名:load

监听页面所有资源加载完毕:给window添加load事件

//页面记载事件
window.addEventListener('load',function(){//执行的操作
})

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

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

事件名:DOMContentLoaded

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

document.addEventListener('DOMContentLoaded',function(){//执行的操作
})

页面滚动事件

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

事件名:scroll

1)监听整个页面滚动:给window或document添加scroll事件

//页面滚动事件
window.addEventListener('scroll',function(){//执行的操作
})

2)监听某个元素的内部滚动直接给某个元素加即可

scrollLeft和scrollTop(属性)

1)获取被卷去的大小

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

3)这两个值是可读写的,得到的是数值型不带单位的数据

获取body元素:document.body

获取html元素:document.documentElement(HTML文档返回对象为HTML元素)

监测页面滚动应该监测最大的元素就是html

尽量在scroll事件里面获取被卷去的距离

div.addEventListener('scroll',function(){console.log(this.scrollTop)
})
scrollTop()

可把内容滚动到指定的坐标

元素.scrollTo(x,y)

页面尺寸事件

会在窗口尺寸改变的时候触发事件(resize):

window.addEventListener('resize',function(){//执行的代码
})

获取宽高:

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

clientWidth和clientHeight

window.addEventListener('resize',function(){let w=document.documentElement.clientWidthconsole.log(w)
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415474.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】2809. 使数组和小于等于 x 的最少时间-2024.1.19

题目&#xff1a; 2809. 使数组和小于等于 x 的最少时间 给你两个长度相等下标从 0 开始的整数数组 nums1 和 nums2 。每一秒&#xff0c;对于所有下标 0 < i < nums1.length &#xff0c;nums1[i] 的值都增加 nums2[i] 。操作 完成后 &#xff0c;你可以进行如下操作&…

西门子WINCC常用C脚本1

1.置位&#xff0c;复位&#xff0c;取反 获取变量值&#xff1a;GetTagBit(可以是位也可以是字节&#xff0c;字&#xff0c;双字等具体字母不同) 设置变量值&#xff1a;SetTagBit 置位&#xff1a;SetTagBit&#xff08;"变量名",1&#xff09; 复位&#xff…

adb、monkey的下载和安装

adb下载 官网网址&#xff1a;Downloads - ADB Shell 尽量不要下载最新的ADB Kits&#xff0c;因为兼容性可能不太好。 点击下载 ADB Kits 作者下载的版本是1.0.36 解压adb 到指定的目录即可。 然后把adb配置 环境变量。 检查adb是否安装成功

vue2 使用vuex状态管理工具 如何配置与搭建。

等我研究研究&#xff0c;下一期给大家出一个后台管理左侧侧边栏如何搭建的。 首先我们先下载一下 vuex包 yarn add vuex3 1.先导入我们需要的 Vue 和 vuex 2.注册vuex 3.创建vuex实例 4.导出store export default store 5.在main.js中导入并挂载到全局。 Vuex如何实…

视频增强修复Topaz Video AI

Topaz Video AI是一款强大的视频增强软件&#xff0c;利用人工智能技术对数千个视频进行训练&#xff0c;结合多个输入视频的帧信息来提高素材的分辨率。该软件可将视频的分辨率提高到最高8K&#xff0c;并保持真实的细节和运动一致性。同时&#xff0c;它还能自动修复视频中的…

树形+分页+表格

一.树形结构的增加和删除 1.树形结构的增加 传入上一层的pid 2.树形结构的删除 传入当前项的id 3.列表刷新 每做一次增加和删除都需要调用,获取列表的接口来刷新列表里面的数据,并且关闭弹窗 二.表格的使用 这些element-ui官方网站都可以进行查询。 这里面需要注意的点…

为什么需要放行回源IP

为什么需要放行回源IP 网站以“独享模式”成功接入WAF后&#xff0c;所有网站访问请求将先经过独享引擎配置的ELB然后流转到独享引擎实例进行监控&#xff0c;经独享引擎实例过滤后再返回到源站服务器&#xff0c;流量经独享引擎实例返回源站的过程称为回源。在服务器看来&…

GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

文章目录 0 入门资料1 物理引擎基本概念Actor & shapesRigid body dynamicsCollision DetectionCollision Resolution 应用与实践Character controllerRagdoll 0 入门资料 GAMES104-现代游戏引擎&#xff1a;从入门到实践_课程视频_bilibiliGAMES104官方账号 - 知乎课程主页…

shopee孵化器选品:如何在Shopee孵化器中制定选品策略

Shopee孵化器&#xff08;Shopee Incubator&#xff09;是一个提供给卖家的平台&#xff0c;卖家可以在这里进行选品策略的制定。选品策略的制定是一个关键的过程&#xff0c;它决定了卖家能否成功地在Shopee平台上销售产品。在本文中&#xff0c;我们将介绍如何在Shopee孵化器…

【算法与数据结构】Java实现查找与排序

文章目录 第一部分&#xff1a;查找算法二分查找插值查找分块查找哈希查找树表查找 第二部分&#xff1a;排序算法冒泡排序选择排序插入排序快速排序 总结 第一部分&#xff1a;查找算法 二分查找 也叫做折半查找&#xff0c;属于有序查找算法。 前提条件&#xff1a;数组数据…

Nginx的应用场景之一http服务器

Nginx本身也是一个静态资源的服务器&#xff0c;当只有访问静态资源的时候&#xff0c;就可以使用Nginx来做服务器&#xff0c;如果一个网站只是静态页面的话&#xff0c;那么就可以通过这种方式来实现部署。 1、 首先在usr/local/test/下创建pic目录, 然后在pic中放一个test.…

Vue中v-if与v-show区别详解

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…