事件高级、

文章目录

    • 1.注册事件(绑定事件)
      • addEventListener 事件监听方式
      • attachEvent 事件监听方式、兼容性解决方案 *
    • 2.删除事件(解绑事件)
      • 删除事件的方式
      • 删除事件兼容性解决方案 *
    • 3.DOM事件流
    • 4.事件对象
      • 使用语法
      • 兼容性方案*
      • 常见属性和方法
    • 5.阻止事件冒泡
      • 阻止事件冒泡的两种方式
      • 阻止事件冒泡的兼容性方案*
    • 6.事件委托(代理、委派)
    • 7.常用的鼠标事件
      • 鼠标事件对象
      • 案例:跟随鼠标的天使
    • 8.常用的键盘事件
      • 键盘事件对象
      • 案例:模拟京东案件输入内容
      • 案例:模拟京东快递单号查询

1.注册事件(绑定事件)

在这里插入图片描述

addEventListener 事件监听方式

 eventTarget.addEventListener(type, listener[, useCapture]) 

在这里插入图片描述
在这里插入图片描述

attachEvent 事件监听方式、兼容性解决方案 *

 eventTarget.attachEvent(eventNameWithOn, callback) 

在这里插入图片描述
兼容性处理的原则: 首先照顾大多数浏览器,再处理特殊浏览器

function addEventListener(element, eventName, fn) {// 判断当前浏览器是否支持 addEventListener 方法if (element.addEventListener) {element.addEventListener(eventName, fn);  // 第三个参数 默认是false} else if (element.attachEvent) {element.attachEvent('on' + eventName, fn);} else {// 相当于 element.onclick = fn;element['on' + eventName] = fn;} 

2.删除事件(解绑事件)

删除事件的方式

在这里插入图片描述

//2.removeEventListener删除事件
divs[1].addEventListener('click',fn);//里面的fn不需要调用加小括号function fn(){alert(22);divs[1].removeEventListener('click',fn);}
//3.
divs[2].attachEvent('onclick',fn1);function fn1(){alert(33);divs[2].detachEvent('onclick',fn1);}

删除事件兼容性解决方案 *

function removeEventListener(element, eventName, fn) {// 判断当前浏览器是否支持 removeEventListener 方法if (element.removeEventListener) {element.removeEventListener(eventName, fn);  // 第三个参数 默认是false} else if (element.detachEvent) {element.detachEvent('on' + eventName, fn);} else {element['on' + eventName] = null;} 

3.DOM事件流

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

<div class="father"><div class="son">son盒子</div></div><script>// dom 事件流 三个阶段// 1. JS 代码中只能执行捕获或者冒泡其中的一个阶段。// 2. onclick 和 attachEvent(ie) 只能得到冒泡阶段。// 3. 捕获阶段 如果addEventListener 第三个参数是 true 那么则处于捕获阶段  document -> html -> body -> father -> son//先执行father再执行son//father包含了son,从外往内捕获,点击了son也等同点击了fathervar son = document.querySelector('.son');son.addEventListener('click', function() {alert('son');}, true);var father = document.querySelector('.father');father.addEventListener('click', function() {alert('father');}, true);// 4. 冒泡阶段 如果addEventListener 第三个参数是 false 或者 省略 那么则处于冒泡阶段  son -> father ->body -> html -> document//先执行son再执行fathervar son = document.querySelector('.son');son.addEventListener('click', function() {alert('son');}, false);var father = document.querySelector('.father');father.addEventListener('click', function() {alert('father');}, false);document.addEventListener('click', function() {alert('document');})</script>

4.事件对象

在这里插入图片描述

使用语法

  eventTarget.onclick = function(event) {// 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt } eventTarget.addEventListener('click', function(event) {// 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt }

这个 event 是个形参,系统帮我们设定为事件对象,不需要传递实参过去。
当我们注册事件时, event 对象就会被系统自动创建,并依次传递给事件监听器(事件处理函数)。

兼容性方案*

在这里插入图片描述

常见属性和方法

e.target 和 this 的区别:
this 是事件绑定的元素, 这个函数的调用者(绑定这个事件的元素)
e.target 是事件触发的元素。
在这里插入图片描述

在这里插入图片描述

<a href=""></a><script>//阻止默认行为,让链接不跳转或者让提交按钮不提交var a=document.querySelector('a');a.addEventListener('click',function(e){e.printDefault();//dom标准写法})//传统的注册方法a.onclick=function(e){//普通浏览器    方法e.printDefault();//低版本浏览器ie678    属性e.returnValue;//可以利用return false也能阻止默认行为,没有兼容性问题,但是后面的代码不执行且只限于传统注册方式return false;}</script>

5.阻止事件冒泡

阻止事件冒泡的两种方式

在这里插入图片描述

阻止事件冒泡的兼容性方案*

 if(e && e.stopPropagation){e.stopPropagation();}else{window.event.cancelBubble = true;}

6.事件委托(代理、委派)

不要给每个子节点单独设置事件监听器,而是事件监听器在其父节点上,利用冒泡原理影响设置每个子节点(重点)

事件冒泡是向上,给父节点添加了事件监听器后其中的子节点也会跟着触发,父节点以上的不受影响。
事件捕获是向下,子节点添加监听器后其以上所有父节点会跟着触发,子节点以上不受影响
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7.常用的鼠标事件

在这里插入图片描述
1.禁止鼠标右键菜单
contextmenu主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单

document.addEventListener('contextmenu', function(e) {
e.preventDefault();
})

2.禁止鼠标选中(selectstart 开始选中)

 document.addEventListener('selectstart', function(e) {e.preventDefault();})

鼠标事件对象

在这里插入图片描述

案例:跟随鼠标的天使

一直跟着鼠标移动
在这里插入图片描述

<style>img {width: 25px;position: absolute;}</style>
</head>
<body><img src="images/3.jpg" alt=""><script>var pic=document.querySelector('img');document.addEventListener('mousemove',function(e){var x=e.pageX;var y=e.pageY;//x,y获取的只是数字 千万不要忘记加单位//再减去图片大小的一半鼠标就会在图片中间pic.style.left=x-13+'px';pic.style.top=y-8+'px';})</script>
})

8.常用的键盘事件

在这里插入图片描述

键盘事件对象

在这里插入图片描述

  1. onkeydown 和 onkeyup 不区分字母大小写,onkeypress 区分字母大小写。
  2. 在实际开发中,我们更多的使用keydown和keyup, 它能识别所有的键(包括功能键)
  3. Keypress 不识别功能键,但是keyCode属性能区分大小写,返回不同的ASCII值
    在这里插入图片描述

案例:模拟京东案件输入内容

当我们按下 s 键, 光标就定位到搜索框
在这里插入图片描述

var search = document.querySelector('input');
//这里keydown键盘按下就获得焦点,字会打进去,如果按着一直不松就会出现问题,因此用keyup更合适
document.addEventListener('keyup', function(e) {
// console.log(e.keyCode);if (e.keyCode === 83) {search.focus();}
})

案例:模拟京东快递单号查询

在这里插入图片描述
在这里插入图片描述
文字是键盘弹起后出现

  <style>.search {position: relative;margin: 100px auto;width: 400px;height: 300px;}.con {display: none;position: relative;width: 200px;height: 20px;color: #333;font-size: 18px;line-height: 20px;border: 1px solid #ccc;box-shadow: 0 2px 4px rgba(0, 0, 0, 2);padding: 5px;}input {width: 200px;height: 25px;margin-top: 15px;}.con::before {content: '';position: absolute;left: 28px;top:28px ;width: 0;height: 0;border: 8px solid #000;border-color: #fff transparent transparent transparent;}</style>
</head>
<body><div class="search"><div class="con">123</div><input type="text" placeholder="请输入您的快递单号" class="jd"></div><script>var con=document.querySelector('.con');var jd_input=document.querySelector('.jd');jd_input.addEventListener('keyup',function(){if(this.value==''){con.style.display='none';}else{con.innerHTML=this.value;con.style.display='block';}})//当失去焦点时隐藏con盒子jd_input.addEventListener('blur',function(){con.style.display='none';con.innerHTML=this.value;})jd_input.addEventListener('focus',function(){if(this.value!=''){con.style.display='block';}})</script>

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

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

相关文章

边缘计算+WEB端应用融合:AI行为识别智能监控系统搭建指南 -- 边缘设备图像识别及部署(二)

专栏目录 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 – 整体介绍&#xff08;一&#xff09; 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 -- 边缘图像识别及部署&#xff08;二&#xff09; 前言边缘图像识别与推流整体思路原始…

海康威视添加新摄像头到原建的网络监控平台中

一、适用场景 1、企业已经存在一套海康威视的监控网络系统&#xff1b; 2、根据业务的需求&#xff0c;要新增加一些摄像头&#xff1b; 3、原施工方忙碌&#xff0c;为新增加的摄像头施工成本较高&#xff1b; 4、新增加海康威视的摄像头视频监控&#xff0c;保存在原建的监控…

构建强大的API:Django中的REST框架探究与实践【第146篇—Django】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 构建强大的API&#xff1a;Django中的REST框架探究与实践 在当今的Web开发中&#xff0c;构…

Apache SeaTunnel MongoDB CDC 使用指南

随着数据驱动决策的重要性日益凸显&#xff0c;实时数据处理成为企业竞争力的关键。SeaTunnel MongoDB CDC(Change Data Capture) 源连接器的推出&#xff0c;为开发者提供了一个高效、灵活的工具&#xff0c;以实现对 MongoDB 数据库变更的实时捕获和处理。 本文将深入探讨该连…

Jackson 2.x 系列【1】概述

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 什么是 JSON3. 常用 Java JSON 库4. Jackson4.1 简介4.2 套件4.3 模块4.…

prompt开发生命周期

1.定义任务场景和成功标准 任务场景可分为简单任务&#xff1a;实体抽取、qa等 复杂任务&#xff1a;代码生成、创意写作等 在定义任务后&#xff0c;就要定义模型实现该任务的成功标准&#xff1a; 模型表现和准确率&#xff1b;延迟&#xff1b;价格。 2.开发测试用例 多…

Vue2(七):超详细vue开发环境搭建(win7),nodejs下载与安装,安装淘宝镜像(报错已解决),配置脚手架

一、安装node.js 本来想粗略写一下的&#xff0c;但是搭建脚手架的时候&#xff0c;遇到了很多问题&#xff0c;浪费快两天时间&#xff0c;记录一下自己的解决办法希望对你们有帮助&#xff01; 1.下载nodejs 安装包下载链接【CNPM Binaries Mirror】 下载我划线的这个&am…

代码随想录算法训练营第25天| 216.组合总和III、17.电话号码的字母组合

216.组合总和III 题目链接&#xff1a;组合总和III 题目描述&#xff1a;找出所有相加之和为 n **的 k ****个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c…

2024热门外贸独立站wordpress模板

工艺品wordpress外贸主题 简约大气的wordpress外贸主题&#xff0c;适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377 日用百货wordpress外贸主题 蓝色大气的wordpress外贸主题&#xff0c;适合做日用百货的外贸公司搭建跨境电商网站使用。 …

Qt教程 — 3.3 深入了解Qt 控件:Input Widgets部件(2)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 QSpinBox组件-窗口背景不透明调节器 2.2 DoubleSpinBox 组件-来调节程序窗口的整体大小 2.3 QTimeEdit、QDateEdit、QDateTimeEdit组件-编辑日期和时间的小部件 Input Widgets部件部件较多&#xff0c;将分为三…

centos上安装Docker

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图&#xff0c;主要功能为 1、编写一个serviceSms短信服务类&#xff1b; 2、需要用到短信的地方统一调用基建层的服务即可&#xff1b; 3、可以随意切换、增加短信厂商&#xff0c;不需要更改场景代码&#xff0c;只需要更改application.yml 里面…

13个外贸业务员常用邮件模板-订单沟通

除了报价后跟进客户&#xff0c;我们在实际工作过程当中也会遇到很多非常规性的情况&#xff0c;需要和客户及时沟通处理。 以下是13个外贸业务员常用邮件模板-订单沟通&#xff1a;你可以根据自己的行业、公司、产品情况以及自身的经验判断进行调整和完善&#xff0c;做出一套…

水下蓝牙耳机哪个牌子好?业界公认四大高口碑游泳耳机

在这个活力四溢的时代&#xff0c;人们对于健康生活方式的追求愈发热切&#xff0c;游泳作为一项兼顾休闲与健身的运动&#xff0c;深受大众喜爱。在水下世界&#xff0c;音乐的陪伴能增添游泳的乐趣&#xff0c;一款好的水下蓝牙耳机成为游泳爱好者们的新宠。 近年来&#xff…

DZY-212中间继电器 DC 220V 板后接线 面板安装 JOSEF约瑟

系列型号: DZY-200系列中间继电器&#xff1b;DZY-201中间继电器&#xff1b; DZY-202中间继电器&#xff1b;DZY-203中间继电器&#xff1b; DZY-204中间继电器&#xff1b;DZY-205中间继电器&#xff1b; DZY-206中间继电器&#xff1b;DZY-207中间继电器&#xff1b; DZY-20…

openEuler 22.03(华为欧拉)一键安装 Oracle 19C(19.22) 数据库

前言 Oracle 一键安装脚本&#xff0c;演示 openEuler 22.03 一键安装 Oracle 19C 单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据…

ssh免密登陆更换目标主机后无法连接

在进行hadoop分布式环境搭建时&#xff08;三台机&#xff0c;master&#xff0c;slave1&#xff0c;slave2&#xff09;&#xff0c;后期slave2系统出现问题&#xff0c;更换新机后&#xff0c;master与slave2文件传输失败&#xff1a; 以为是秘钥过期的问题&#xff0c;更换…

走出大模型部署新手村!小明这样用魔搭+函数计算

作者&#xff1a;拓山 前文介绍了魔搭 ModelScope 社区模型服务 SwingDeploy 服务。开发者可以将模型从魔搭社区的模型库一键部署至阿里云函数计算&#xff0c;当选择模型并部署时&#xff0c;系统会选择对应的机器配置。按需使用可以在根据工作负载动态的减少资源&#xff0c…

c++多长时间会被Python或者其他语言取代?

c多长时间会被Python或者其他语言取代&#xff1f; 如果不考虑市场因素&#xff0c;C#今天就可以取代C。 自.NET跨平台至今&#xff0c;C能做的工作&#xff0c;C#都能做了&#xff0c;且性能差别不大。 在C最有优势的嵌入式UI方面&#xff0c;C#可以拿出Avalonia替代QT。用 …

9.16单词拆分(LC139-M)

算法&#xff1a; 这道题可以用回溯&#xff0c;但是可能会超时 可以用背包问题解决&#xff1a; 物品&#xff1a;单词 背包&#xff1a;字符串&#xff1a; 单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。 拆分时可以重复使用字典中的单词&#xff0c;就…