WEB APIs (3)

事件对象

事件对象有事件触发时的相关信息,如点击事件中事件对象储存了鼠标点在哪个位置的信息

场景:

用户按下了哪个键,按下回车键可以发布新闻

鼠标点击了哪个元素,从而做哪些操作

参数e为事件对象

常用属性

type

获取当前事件类型

clientX/clientY

获取光标相对浏览器可见窗口左上角位置

offsetX/offsetY

获取光标相对当前DOM元素左上角位置

key

用户按下键盘的值

环境对象

能够分析判断函数运行在不同环境中this所指代的对象

其指的是函数内部特殊的变量this,代表着当前函数运行时所处环境

每个函数里都有this,普通函数里的this指向window

事件所调用的函数this对象指向调用者

回调函数

将函数A作为参数传递给函数B,称函数A为回调函数

fn即为回调函数

表单全选反选案例

选择被勾选的复选框

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport"
      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

   <title>~</title>

   <link rel="shortcut icon" href="https://www.bilibili.com/favicon.ico">
   <link rel="stylesheet" href="css/初始化表.css">
   <link rel="stylesheet" href="css/index.css">
   <meta name="keywords" content="..." />
   <style>
      /*写代码时始终要考虑权重问题!*/

      @font-face {
         font-family: 'icomoon';
         src: url('fonts/icomoon.eot?au9n7q');
         src: url('fonts/icomoon.eot?au9n7q#iefix') format('embedded-opentype'),
            url('fonts/icomoon.ttf?au9n7q') format('truetype'),
            url('fonts/icomoon.woff?au9n7q') format('woff'),
            url('fonts/icomoon.svg?au9n7q#icomoon') format('svg');
         font-weight: normal;
         font-style: normal;
         font-display: block;
      }

      table {
         border-collapse: collapse;
         border: 1px solid #c0c0c0;
         width: 500px;
         margin: 100px auto;
         text-align: center;
      }

      th {
         background-color: #09c;
         font: bold 16px "微软雅黑";
         color: #fff;
         height: 24px;
      }

      td {
         border: 1px solid #d0d0d0;
         padding: 10px;
         color: #404060;
      }

      .allCheck {
         width: 80px;
      }
   </style>
</head>

<body>
   <table>
      <tr>
         <th class="allCheck">
            <input type="checkbox" id="checkAll"><span class="all">全选</span>
         </th>
         <th>商品</th>
         <th>商家</th>
         <th>价格</th>
      </tr>
      <tr>
         <td>
            <input type="checkbox" class="ck">
         </td>
         <td>小米手机</td>
         <td>小米</td>
         <td>¥1999</td>
      </tr>
      <tr>
         <td>
            <input type="checkbox" class="ck">
         </td>
         <td>小米净水器</td>
         <td>小米</td>
         <td>¥4999</td>
      </tr>
      <tr>
         <td>
            <input type="checkbox" class="ck">
         </td>
         <td>小米电视</td>
         <td>小米</td>
         <td>¥5999</td>
      </tr>
   </table>

   <script>
      const checkAll = document.querySelector('#checkAll')
      const cks = document.querySelectorAll('.ck')

      checkAll.addEventListener('click', function () {
         for (let i = 0; i < cks.length; i++) {
            cks[i].checked = checkAll.checked
         }
      })

      for (let i = 0; i < cks.length; i++) {
         cks[i].addEventListener('click', function () {
               checkAll.checked = (document.querySelectorAll('.ck:checked').length===cks.length)
         })

      }


   </script>
</body>

</html>

两种注册事件

传统on注册(L0)

同一个对象,后面注册的事件会覆盖前面注册(同一个事件)
直接使用null覆盖偶就可以实现事件的解绑
都是冒泡阶段执行的

事件监听注册(L2)

语法: addEventListener(事件类型,事件处理函数,是否使用捕获)
后面注册的事件不会覆盖前面注册的事件(同一个事件)
可以通过第三个参数去确定是在冒泡或者捕获阶段执行
必须使用removeEventListener(事件类型,事件处理函数,获取捕获或者冒泡阶段)
匿名函数无法被解绑

事件流

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

触发事件时,经历两个阶段,捕获阶段,冒泡阶段

事件冒泡

当一个元素的事件被触发时,同样事件将会在该元素所有祖先元素中依次被触发

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

但我们不需要父类触发事件时,需要阻止冒泡

阻止冒泡

容易导致事件影响到父类元素

把事件限制在当前元素内进行阻止,我们需要拿到事件对象

语法:

事件对象.stopPropagation()

如此即可阻止

事件解绑

如果用L2,使用removeEventListener(事件类型,事件处理函数[获取捕获或冒泡阶段])

注意:匿名函数无法解绑

鼠标经过事件:

mouseover和mouseout 会有冒泡效果

mouseoenter和mouseleave 没有冒泡效果(推荐)

事件委托

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

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

原理利用事件冒泡

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

阻止元素默认行为

比如阻止链接、表单域跳转

语法:

e.preventDefault()

其他事件

1.页面加载事件(了解)

加载外部资源(图片、外联和js等)加载完毕时触发的事件

有时候需要等页面资源全部处理完做一些事

事件名:load

使用load可以是js代码写在任意位置,等页面加载完毕再执行

其不光可以监听整个页面加载完毕,可以对某一资源如图片绑定load事件

另一事件:DOMContentLoaded

无需等待样式表、图片等加载完毕,只需HTML文档完全加载和结息完成后即可

2.元素滚动事件

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

检测用户把网页滚动到某个区域后做出一些处理

事件名:scroll

监听整个页面滚动

如监听某元素内部滚动直接给该元素加即可

使用场景

比如滚动一段距离让某些元素隐藏

该距离可让 scroll 检测

scrollLeft和scrollTop

获取被卷去的大小

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

可读写(可获取值,也可赋值:如回到顶部)

获取html的元素写法

document.documentElement(返回数字型)

3.元素尺寸与位置

clientWidth和clientHeight(了解)

获取元素可见部分宽高(不包括边框、外边距)

offsetWidth和offsetHeight

获取宽高:

获取元素宽高(包括边框、外边距)

获取数值,方便计算

注意:获取的是可视宽高,如果隐藏,结果为0

获取位置:

offsetLeft和offsetTop(对比绝对定位)

获取元素距离自己定位父类元素的左、上距离

注意:为只读属性

得到位置以谁为准?

带有定位的父级,若没有定位以文档左上角为准

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

枚举类(enum)

优质博文&#xff1a;IT-BLOG-CN ​ 枚举类&#xff1a; 就是对象的实例个数是确定的&#xff08;例如&#xff1a;单例模式&#xff09;&#xff0c;也就说我们在创建枚举类的时候&#xff0c;会对构造器进行设置 一、自定义创建枚举类 为什么需要枚举类&#xff1f; 【1】…

前端开发,Vue的双向数据绑定的原理

目录 一、什么是前端 二、Vue.JS框架 三、双向数据绑定 四、Vue的双向数据绑定的原理 一、什么是前端 前端通常指的是网页或应用程序中用户直接交互和感知的部分&#xff0c;也称为客户端。前端开发涉及使用HTML、CSS和JavaScript等技术来构建用户界面和交互功能。前端开发…

[WebDav] WebDav基础知识

文章目录 什么是WebDavWebDav常用命令WebDav常用命令的测试&#xff08;代码&#xff09;PROPFIND 方法测试PUT 方法测试GET 方法测试PROPPATCH方法 WebDav缓存Cache-ControlEtag测试 强制重新验证不需要缓存 WebDav的锁WebDav的状态码WebDav身份验证WebDav版本控制WebDav和FTP…

安卓adb调试备忘录

由于 MAC 的 USB 口全被占用着&#xff0c;采用无线连接刚方便&#xff0c;记录一下&#xff0c;以防忘记~ ADB原理 adb devices -l ## 列出连接的设备adb tcpip [端口号] adb tcpip 6666 # 将当前已连接USB上的Mobile端切换为TCP/IP模式&#xff0c;以6666端口进行监听. adb…

数据结构笔记1线性表及其实现

终于开始学习数据结构了 c语言结束之后 我们通过题目来巩固了 接下来我们来学习数据结构 这里我们将去认识到数据结构的一些基础知识&#xff0c;我在第一次学习的时候会很迷糊现在重新学习发现之前的时候还是因为c语言学的不牢固导致学习数据结构困难 这里 我会尽量的多写代码…

Day51 42 接雨水 84柱状图中的最大矩形

42 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]输出&#xff1a;6解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,…

前端 webSocket 的使用

webSocket使用 注意要去监听websocket 对象事件&#xff0c;处理我们需要的数据 我是放在了最外层的index 内&#xff0c;监听编辑状态&#xff0c;去触发定义的方法。因为我这个项目是组件化开发&#xff0c;全部只有一个总编辑按钮&#xff0c;我只需监听是否触发了编辑即可…

深入探索STM32的存储选项:片内RAM、片内Flash与SDRAM

博客&#xff1a;深入探索STM32的存储选项&#xff1a;片内RAM、片内Flash与SDRAM 在嵌入式系统设计中&#xff0c;存储管理是一个至关重要的方面&#xff0c;尤其是对于基于STM32这类强大的微控制器来说。STM32系列微控制器因其高性能、低功耗以及灵活的存储选项而广受欢迎。本…

数智化转型的三大关键点

一、重新认识数智化转型 消费红利时代&#xff0c;伴随中国宏观经济向好发展&#xff0c;相当一部分企业可以轻松实现快速增长&#xff0c;如同搭乘了一架高速运转的电梯一路飞升。然而&#xff0c;随着宏观经济增速放缓&#xff0c;时代的电梯逐渐失去效力&#xff0c;中国商…

18. 四数之和 - 力扣(LeetCode)

问题描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; …

C#,洗牌问题(Card Shuffle Problem)的算法与源代码

1 洗牌问题&#xff08;Card Shuffle Problem&#xff09; 洗牌问题&#xff08;Card Shuffle Problem&#xff09;的基本描述 你有 100 张牌&#xff0c;从 1 到 100。 你把它们分成 k 堆&#xff0c;然后按顺序收集回来。 例如&#xff0c;如果您将它们分成 4 堆&#xff0…

关于发送邮件时Reply Reply All和Forward的区别

我们发送邮件的时候总是会纠结到底是用回复&#xff0c;还是回复全部&#xff0c;还是转发。 回复- 仅回复发件人。 全部回复- 回复发件人和抄送/密件抄送的联系人。 转发- 将电子邮件的副本发送给其他收件人。 这几种情形分别在什么时候用呢&#xff1f; 回复 比如Alen给你…

【设计模式】23种设计模式笔记

设计模式分类 模板方法模式 核心就是设计一个部分抽象类。 这个类具有少量具体的方法&#xff0c;和大量抽象的方法&#xff0c;具体的方法是为外界提供服务的点&#xff0c;具体方法中定义了抽象方法的执行序列 装饰器模式 现在有一个对象A&#xff0c;希望A的a方法被修饰 …

浏览器缓存机制

浏览器缓存有先后顺序&#xff0c;总体分为以下四个方面&#xff1a; Memory Cache Service Worker Cache Disk Cache Push Cache 缓存位置 1. Memory Cache 内存中的缓存 优点&#xff1a; 浏览器会优先去命中的一种缓存 响应速度最快 缺点&#xff1a; 缓存时间短&#xf…

ABAP 导入Excel表示例程序

目录 ABAP 导入excel示例程序创建程序使用的结构上传下载模板 ABAP 导入excel示例程序 批量导入程序&#xff0c;需要使用到导入模板&#xff0c;首先需要创建程序&#xff0c;之后是需要创建excel导入模板&#xff0c;并且需要将excel导入模板上传到SAP系统里面&#xff0c;之…

Code-Audit(代码审计)习题记录

介绍&#xff1a; 自己懒得搭建靶场了&#xff0c;靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习&#xff0c;可以随地访问&#xff0c;本文所有的题目均来源于网站HSCSEC-Code Audit 1、习题一 题目内容如下&#xff1a; 1…

运行jar时提示缺少依赖的类

供应商丢过来一个jar&#xff0c;是用Java写的Windows桌面程序&#xff0c;运行jar时提示缺少依赖的类&#xff0c;一看就是打包没带依赖的库&#xff0c;下面是解决方法&#xff1a; 1、解压缩jar&#xff0c;查看 META-INF 目录下的 MANIFEST.MF&#xff0c;看看都引用了哪些…

FlinkCDC详解

1、FlinkCDC是什么 1.1 CDC是什么 CDC是Chanage Data Capture&#xff08;数据变更捕获&#xff09;的简称。其核心原理就是监测并捕获数据库的变动&#xff08;例如增删改&#xff09;&#xff0c;将这些变更按照发生顺序捕获&#xff0c;将捕获到的数据&#xff0c;写入数据…

Cesium for Unreal 从源码编译到应用——插件编译

一、安装环境 Unreal Engine 5.3 CMake 3.17.5 Microsoft Visual Studio 2019 二、源码准备 下载cesium-unreal-samples工程。 git clone https://github.com/CesiumGS/cesium-unreal-samples.git 然后在工程目录创建Plugins文件夹&#xff0c;并下载cesium-unreal工程。 …

演练纪实│同创永益助力中交财务公司成功开展灾备应急演练

12月26日同创永益协助中交财务公司顺利完成核心业务系统、高性能云平台等关键业务系统的子系统验证演练&#xff0c;以及模拟切换演练、同城灾备应急演练。 同创永益北方交付二组的同事在演练前与中交财务公司演练负责人紧密沟通&#xff0c;展现了出色的专业素养和团队协作能力…