JavaScript将参数传递给事件处理程序

本篇文件我们将实现导航栏中,选中时候,会将您选中的进行高亮显示;
● 首先我们来获取我们想要的HTML元素

const nav = document.querySelector('.nav');

● 接着我们来写选中的高亮显示

nav.addEventListener('mouseover', function (e) {   //鼠标进入时,会触发mouseoverif (e.target.classList.contains('.nav__link')) {  //确保我们移动式导航连接上面的元素const link = e.target;  //将我们移动的这个元素保存到一个变量中const siblings = link.closest('.nav').querySelectorAll('.nav__link');   //选择nav父元素附近的所有的nav__link元素const logo = link.closest('.nav').querySelector('img'); //选择nav父元素附近的所有的图片元素siblings.forEach(el => {  //通过forEach来判断将其他的链接元素透明度降低if (el !== link) el.style.opacity = 0.5;});logo.style.opacity = 0.5;  //将logo的透明度降低}
});

在这里插入图片描述

● 现在可以实现,但是有一个问题,当我们移出的时候,并不会恢复,所以我们还需要一个移除的事件

//菜单渐变动画
nav.addEventListener('mouseover', function (e) {if (e.target.classList.contains('nav__link')) {const link = e.target;const siblings = link.closest('.nav').querySelectorAll('.nav__link');const logo = link.closest('.nav').querySelector('img');siblings.forEach(el => {if (el !== link) el.style.opacity = 0.5;});logo.style.opacity = 0.5;}
});nav.addEventListener('mouseout', function (e) {if (e.target.classList.contains('nav__link')) {const link = e.target;const siblings = link.closest('.nav').querySelectorAll('.nav__link');const logo = link.closest('.nav').querySelector('img');siblings.forEach(el => {if (el !== link) el.style.opacity = 1;});logo.style.opacity = 1;}
});

这样就可以实现当我们移入到某个元素的时候,有个高亮动画,但是,这样肯定是让代码的臃肿,我们需要去重构这段代码,一般呢,我们会选择通过函数的方式来重构这段代码,例如

const handleHover = function (e, opacity) {if (e.target.classList.contains('nav__link')) {const link = e.target;const siblings = link.closest('.nav').querySelectorAll('.nav__link');const logo = link.closest('.nav').querySelector('img');siblings.forEach(el => {if (el !== link) el.style.opacity = opacity;});logo.style.opacity = opacity;}
};nav.addEventListener('mouseover', function (e) {handleHover(e, 0.5);
});nav.addEventListener('mouseout', function (e) {handleHover(e, 1);
});

● 这样也是可以实现的,但是这个点击事件的匿名回调函数还是不够优雅,我们可以通过bind方法来去除这个重复的匿名回调函数

const handleHover = function (e) {if (e.target.classList.contains('nav__link')) {const link = e.target;const siblings = link.closest('.nav').querySelectorAll('.nav__link');const logo = link.closest('.nav').querySelector('img');siblings.forEach(el => {if (el !== link) el.style.opacity = this;});logo.style.opacity = this;}
};nav.addEventListener('mouseover', handleHover.bind(0.5));nav.addEventListener('mouseout', handleHover.bind(1));

这里可能很多小伙伴不是看的很明白,这里来解释一下:

  1. Function.prototype.bind 方法:
    ○ bind 方法创建一个新的函数,在调用时将 this 关键字设置为提供的值。
    ○ 在这个例子中,handleHover.bind(0.5) 创建了一个新函数,当这个新函数被调用时,this 的值会被绑定为 0.5。
    ○ 类似地,handleHover.bind(1) 创建了另一个新函数,将 this 的值绑定为 1。
  2. this 的使用:
    ○ 在 handleHover 函数内部,this 指向了通过 bind 方法传入的值(即 0.5 或 1)。
    ○ this 被用作不透明度值(opacity),根据事件的类型(mouseover 或 mouseout)来设置兄弟元素和 logo 的不透明度。
  3. 事件处理:
    ○ 通过 addEventListener 方法给 nav 元素添加两个事件监听器:一个用于 mouseover 事件,另一个用于 mouseout 事件。
    ○ 每个事件监听器都绑定了 handleHover 函数,并且通过 bind 方法传入了不同的 this 值(0.5 和 1)。
    通过使用 bind 方法将事件处理函数的 this 关键字绑定到特定的值(0.5 或 1),以简化代码并避免显式传递参数。这种方法使代码更具可读性和可维护性。

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

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

相关文章

申请一张含100个域名的证书-免费SSL证书

挑战一下,申请一张包含100个域名的证书 首先,我们访问来此加密网站,进入登录页面,输入我的账号密码。 登录后,咱们就可以开始申请证书,首先说一下,咱账号是SVIP哦,只有SVIP才可以申…

记一次EasyExcel的错误使用导致的频繁FullGC

记一次EasyExcel的错误使用导致的频繁FullGC 一、背景描述二、场景复现三、原因分析四、解决方案五、思考复盘 一、背景描述 繁忙的校招结束了,美好的大学四年也结束了,作者也有10个月没有更新了。拿到心仪的offer之后也开始了苦B的打工生活。 最近接到…

Python海量数据处理脚本大集合:pyWhat

pyWhat:精简海联数据,直达数据弱点要害- 精选真开源,释放新价值。 概览 pyWhat是Github社区上一款比较实用的开源Python脚本工具。它能够快速提取信息中的 IP 地址、邮箱、信用卡、数字货币钱包地址、YouTube 视频等内容。当你遇到了一串莫名…

【PYG】Planetoid中边存储的格式,为什么打印前十条边用edge_index[:, :10]

edge_index 是 PyTorch Geometric 中常用的表示图边的张量。它通常是一个形状为 [2, num_edges] 的二维张量,其中 num_edges 表示图中边的数量。每一列表示一条边,包含两个节点的索引。 实际上这是COO存储格式,官方文档里也有写,…

上位机图像处理和嵌入式模块部署(mcu 项目1:固件编写)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 说完了上位机的开发,接下来就是固件的开发。前面我们说过,目前使用的开发板是极海apm32f103的开发板。它自身包含了iap示例…

一些迷你型信息系统

只有一个表,比较简单易用; 1 博物馆信息查询系统 信息录入,浏览,添加,更新,删除; 下载, https://download.csdn.net/download/bcbobo21cn/89505217

中国网络安全审查认证和市场监管大数据中心数据合规官CCRC-DCO

关于CCRC-DCO证书的颁发机构,它是由中国网络安全审查认证与市场监管大数据中心(简称CCRC)负责。 该中心在2006年得到中央机构编制委员会办公室的批准成立,隶属于国家市场监督管理总局,是其直辖的事业单位。 依据《网络…

计算机的错误计算(十八)

摘要 计算机的错误计算(四)指出一元二次方程的计算精度问题。本节给出其一种解决方案。 计算机的错误计算(四)与(十七)分别指出一元二次方程的求解是具有挑战性的难题,其出错原因是因为相减相消…

YOLOv10(7):YOLOv10训练(以训练VOC数据集为例)

YOLOv10(1):初探,训练自己的数据_yolov10 训练-CSDN博客 YOLOv10(2):网络结构及其检测模型代码部分阅读_yolov10网络结构图-CSDN博客 YOLOv10(4):损失&…

【Linux】初识操作系统

一、冯•诺依曼体系结构 在学习操作系统之前,我们先来认识一下冯•诺依曼体系结构,我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机&am…

神经网络训练(一):基于残差连接的图片分类网络(ResNet18)

目录 一、简介:二、图片分类网络1.记载训练数据(torch自带的cifa10数据集)2.数据增强3.模型构建4.模型训练三、完整源码及文档一、简介: 基于残差连接的图片分类网络,本网络使用ResNet18作为基础模块,根据cifa10的特点进行改进网络,使用交叉熵损失函数和SGD优化器。本网…

使用pyqt5编写一个七彩时钟

使用pyqt5编写一个七彩时钟 效果代码解析定义 RainbowClockWindow 类初始化用户界面显示时间方法 完整代码 在这篇博客中,我们将使用 PyQt5 创建一个简单的七彩数字时钟。 效果 代码解析 定义 RainbowClockWindow 类 class RainbowClockWindow(QMainWindow):def _…

【TB作品】温湿度监控系统设计,ATMEGA16单片机,Proteus仿真

题2:温湿度监控系统设计 功能要求: 1)开机显示时间(小时、分)、时分可修改; 2)用两个滑动变阻器分别模拟温度传感器(测量范 围0-100度)与湿度传感器(0-100%),通过按键 可以在数码管切换显示当前温度值、湿度值; 3)当温度低于20度时,红灯长亮; 4)当湿度高于70%时,黄灯长亮; 5)当…

安卓实现微信聊天气泡

一搜没一个能用的&#xff0c;我来&#xff1a; 布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xml…

Tech Talk:智能电视eMMC存储的五问五答

智能电视作为搭载操作系统的综合影音载体&#xff0c;以稳步扩大的市场规模走入越来越多的家庭&#xff0c;成为人们生活娱乐的重要组成部分。存储部件是智能电视不可或缺的组成部分&#xff0c;用于保存操作系统、应用程序、多媒体文件和用户数据等信息。智能电视使用eMMC作为…

vue3中使用Antv G6渲染树形结构并支持节点增删改

写在前面 在一些管理系统中&#xff0c;会对组织架构、级联数据等做一些管理&#xff0c;你会怎么实现呢&#xff1f;在经过调研很多插件之后决定使用 Antv G6 实现&#xff0c;文档也比较清晰&#xff0c;看看怎么实现吧&#xff0c;先来看看效果图。点击在线体验 实现的功能…

受限玻尔兹曼机浅析

受限玻尔兹曼机&#xff08;Restricted Boltzmann Machine&#xff0c;简称RBM&#xff09;是一种特殊的随机生成神经网络&#xff0c;能够学习并发现数据的复杂规则分布。以下是关于受限玻尔兹曼机算法的详细介绍&#xff1a; ⭐️ 定义与起源 定义&#xff1a; 受限玻尔兹…

深入剖析Tomcat(十四) Server、Service 组件:如何启停Tomcat服务?

通过前面文章的学习&#xff0c;我们已经了解了连接器&#xff0c;四大容器是如何配合工作的&#xff0c;在源码中提供的示例也都是“一个连接器”“一个顶层容器”的结构。并且启动方式是分别启动连接器和容器&#xff0c;类似下面代码 connector.setContainer(engine); try …

小程序的运行机制、更新机制、生命周期介绍保姆级教程全解

一、小程序运行机制 1. 小程序冷启动 小程序启动可以分为两种情况&#xff0c;一种是冷启动&#xff0c;一种是热启动- 冷启动&#xff1a;如果用户首次打开&#xff0c;或小程序销毁后被用户再次打开&#xff0c;此时小程序需要重新加载启动- 热启动&#xff1a;如果用户已经打…

HSP_12章 Python面向对象编程oop_多态

文章目录 P128 多态问题的引出P129 多态细节和使用1. 多态介绍&特别说明2. 多态的好处3. 特别说明: Python多态的特点4. 使用多态的机制来解决主人喂食物的问题 P128 多态问题的引出 先看一个问题 # 说明: 先试用传统的方式完成 class Food:name Nonedef __init__(self,…