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.pswp.cn/web/37934.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37934.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37934.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

主干網絡篇 | YOLOv5/v7 更換主干網絡之 ShuffleNetv2 | 高效CNN架構設計的實用指南

主干網絡篇 | YOLOv5/v7 更換主干網絡之 ShuffleNetv2 | 高效CNN架構設計的實用指南 1. 簡介 近年來,深度卷積神經網絡(CNN)在圖像識別、目標檢測等領域取得了巨大進展。然而,隨著模型復雜度的不斷提升,模型訓練和部…

申請一張含100個域名的證書-免費SSL證書

挑戰一下,申請一張包含100個域名的證書 首先,我們訪問來此加密網站,進入登錄頁面,輸入我的賬號密碼。 登錄后,咱們就可以開始申請證書,首先說一下,咱賬號是SVIP哦,只有SVIP才可以申…

記一次EasyExcel的錯誤使用導致的頻繁FullGC

記一次EasyExcel的錯誤使用導致的頻繁FullGC 一、背景描述二、場景復現三、原因分析四、解決方案五、思考復盤 一、背景描述 繁忙的校招結束了,美好的大學四年也結束了,作者也有10個月沒有更新了。拿到心儀的offer之后也開始了苦B的打工生活。 最近接到…

Python海量數據處理腳本大集合:pyWhat

pyWhat:精簡海聯數據,直達數據弱點要害- 精選真開源,釋放新價值。 概覽 pyWhat是Github社區上一款比較實用的開源Python腳本工具。它能夠快速提取信息中的 IP 地址、郵箱、信用卡、數字貨幣錢包地址、YouTube 視頻等內容。當你遇到了一串莫名…

【golang】go mod私有倉庫配置

文章目錄 Golang版本控制go mod使用私有倉庫(gitlab)依賴設置配置代碼托管站點Go mod尋找代碼倉庫原理使用代理實現代碼托管站點訪問 Golang版本控制 go version v1.22.0 當我們新建一個go項目時,在項目根目錄下執行go mod init可以初始化go.mod文件用于管理包依賴。…

Spring Data與多數據源配置

Spring Data與多數據源配置 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們來探討如何在Spring Data中配置和使用多個數據源。 在現代應用程序中&…

計算機相關術語科普之什么叫網關(Gateway)

網關(Gateway)是一個在計算機網絡中起到關鍵作用的設備或系統,它扮演著網絡間連接器或協議轉換器的角色。 一、定義與功能 1)定義: 網關是在不同網絡之間實現互連的復雜設備,僅用于兩個高層協議不同的網…

【PYG】Planetoid中邊存儲的格式,為什么打印前十條邊用edge_index[:, :10]

edge_index 是 PyTorch Geometric 中常用的表示圖邊的張量。它通常是一個形狀為 [2, num_edges] 的二維張量,其中 num_edges 表示圖中邊的數量。每一列表示一條邊,包含兩個節點的索引。 實際上這是COO存儲格式,官方文檔里也有寫,…

Web 品質標準

Web 品質標準 引言 隨著互聯網的快速發展,Web應用已經滲透到我們生活的方方面面。為了確保Web應用的質量,提高用戶體驗,Web品質標準應運而生。這些標準涵蓋了多個方面,包括性能、安全性、可訪問性、用戶體驗等。本文將詳細介紹這些標準,并探討它們在實際開發中的應用。 …

上位機圖像處理和嵌入式模塊部署(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):損失&…

汽車之家論壇評論全面采集實戰指南:Python爬蟲篇

聚焦汽車之家,解鎖評論寶藏 在這個數據為王的時代,每一個角落的信息都可能成為寶貴的洞察來源。汽車之家,作為汽車行業內的權威論壇,其海量的用戶評論不僅是消費者購車的重要參考,也是汽車品牌與市場研究者不可忽視的…

【Android面試八股文】在你之前的Android項目中,你是如何進行性能優化的?

在之前的Android項目中,優化和提升性能是一個重要且常見的任務。 以下是一些常用的性能優化方法和策略: 分析和測量: 使用Android Studio中的Profiling工具(如Profiler、Trace等)進行性能分析,識別CPU、內存和網絡使用情況。使用第三方工具(如Systrace)來分析系統層面…

iOS 練習項目 Landmarks (四):添加 AutoLayout 約束

iOS 練習項目 Landmarks (四):添加 AutoLayout 約束 iOS 練習項目 Landmarks (四):添加 AutoLayout 約束新增 topLabel圖片視圖圓形裁切陰影使用 AutoLayout 為詳情頁的組件添加約束DetailViewControllerDe…

如何在 Logback 和 Log4j 中獲取日志:一個開發者指南

日志記錄是軟件開發中的關鍵實踐,它幫助我們監控應用程序的行為,定位問題并優化性能。在 Java 生態系統中,Logback 和 Log4j 是兩個廣泛使用的日志框架,它們都基于 SLF4J API 提供日志服務。本文將指導你如何在這兩個框架中獲取日…

7-490 將字符串“software“賦給一個字符指針,并從第一個字母開始間隔地輸出該串(簡單字符串)

編程將字符串"software"賦給一個字符指針 然后從第一個字母開始間隔地輸出該串 請用指針法完成。 輸入樣例: 在這里給出一組輸入。例如&#xff1a; 無輸入輸出樣例: 在這里給出相應的輸出。例如&#xff1a; sfwr #include <stdio.h> #include <stri…

Linux環境下快速部署Spring Boot應用:高效命令組合實踐

概要&#xff1a; 本文旨在介紹一種高效的Linux命令組合&#xff0c;用于簡化Spring Boot項目的部署與管理流程。通過結合使用nohup、java -jar、輸出重定向以及進程管理命令&#xff0c;我們能夠實現Spring Boot應用的快速后臺啟動及便捷的進程控制&#xff0c;尤其適合于自動…