〖大前端 - 基礎入門三大核心之JS篇?〗- DOM事件對象及它的屬性

  • 說明:該文屬于 大前端全棧架構白寶書專欄,目前階段免費如需要項目實戰或者是體系化資源,文末名片加V!
  • 作者:不渴望力量的哈士奇(哈哥),十余年工作經驗, 從事過全棧研發、產品經理等工作,目前在公司擔任研發部門CTO。
  • 榮譽:2022年度博客之星Top4、2023年度超級個體得主、谷歌與亞馬遜開發者大會特約speaker全棧領域優質創作者

  • 🏆 白寶書系列
    • 🏅 啟示錄 - 攻城獅的自我修養
    • 🏅 Python全棧白寶書
    • 🏅 ChatGPT實踐指南白寶書
    • 🏅 產品思維訓練白寶書
    • 🏅 全域運營實戰白寶書
    • 🏅 大前端全棧架構白寶書


文章目錄

  • ? 事件對象
    • 🌟 事件對象中的鼠標的屬性
    • 🌟 事件對象中的鍵盤屬性

? 事件對象

事件對象: 事件處理函數提供一個形式參數,它是一個對象,封裝了本次事件的細節,這個參數通常用單詞event或字母e來表示

示例代碼:

oBox.onmousemove = function (e) {//對象e就是這次事件的“事件對象”
}

事件對象中有很多的強大的屬性和方法,我們可以直接拿來使用。接下來,接下來我們來看一些常用的屬性和方法:

🌟 事件對象中的鼠標的屬性

鼠標位置屬性就是在鼠標事件中,描述鼠標位置的一些屬性

屬性屬性描述
clientX鼠標指針相對于瀏覽器的水平坐標
clientY鼠標指針相對于瀏覽器的垂直坐標
pageX鼠標指針相對于整張網頁的水平坐標
pageY鼠標指針相對于整張網頁的垂直坐標
offsetX鼠標指針相對于事件源元素的水平坐標
offsetY鼠標指針相對于事件源元素的垂直坐標

我們用一張圖來解釋這些屬性具體指的是什么(因為瀏覽器框可能不能完全展示整個網頁,需要用右側的滾動條滾動才能看見,下圖種用虛線框代表整個網頁):

image-20230420141650889

使用這些屬性的示例代碼:

<!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"><title>Document</title><style>* {margin: 0;padding: 0;}#box {width: 200px;height: 200px;background-color: #ccc;margin: 100px;}body {height: 2000px;}#info {font-size: 20px;margin-left: 100px;}</style>
</head>
<body><div id="box"></div><div id="info"></div><script>var oBox = document.getElementById('box');var oInfo = document.getElementById('info');oBox.onmousemove = function (e) {oInfo.innerHTML = 'offsetX/Y:   ' + e.offsetX + ',' + e.offsetY + '<br>' + 'clientX/Y:   ' + e.clientX + ',' + e.clientY + '<br>'+ 'pageX/Y:   ' + e.pageX + ',' + e.pageY;};</script>
</body>
</html>

image-20230420161900202

上述代碼中,如果頁面為往下滾動,那么clientX/Y和pageX/Y的值會是一模一樣的,很好理解,因為網頁正處于最上方,和瀏覽器的坐標系是重疊的。當頁面往下滾動后,兩者才會出現差異。

需要注意的是,DOM中規定:offsetX和offsetY是鼠標所在之處的最內部盒子的坐標,比如下面的代碼中,雖然我們設置的是大盒子的事件監聽,但當鼠標放到小盒子中時,offsetX和offsetY顯示是以小盒子為基準的坐標:image-20230420162152804

事件對象中鼠標滾輪事件onmousewheel也有屬性——deltaY,表示鼠標滾輪滾動方向,向下滾動時返回正值,向上滾動時返回負值

示例代碼:

<body><div id="box"></div><script>document.onmousewheel = function (e) {console.log(e.deltaY);}</script>
</body>

在這里插入圖片描述


🌟 事件對象中的鍵盤屬性

e.charCode屬性 通常用于onkeypress事件中,表示用戶輸入字符的字符碼

e.keyCode屬性 通常用于onkeydown事件和onkeyup事件中,表示用戶按下的按鍵的“鍵碼”(鍵盤上每一個按鍵都會對應一個鍵碼)

關于字符按鍵和字符碼的對應關系如下:

字符對應的字符碼(charCode)
數字0~948~57
大寫字母A~Z65~90
小寫字母a~z97~122

關于按鍵和鍵碼的對應關系如下:

按鍵對應的鍵碼(keyCode)
數字0~948~57(同charCode)
字母不分大小寫a~z65~90
四個方向鍵????37、38、39、40
回車鍵13
空格鍵32

使用這些屬性的示例代碼:

<body><input type="text" id="field1"><div id="info1"></div><input type="text" id="field2"><div id="info2"></div><script>var oField1 = document.getElementById('field1');var oInfo1 = document.getElementById('info1');var oField2 = document.getElementById('field2');var oInfo2 = document.getElementById('info2');oField1.onkeypress = function (e) {oInfo1.innerText = '您按鍵的對應的字符碼是:' + e.charCode;};oField2.onkeydown = function (e) {oInfo2.innerText = '您按鍵的對應的鍵碼是:' + e.keyCode;};</script>
</body>

image-20230420193534953

學到這里,我們可能還是不知道這個字符碼和鍵碼在實際工作中有什么用,接下來就來寫一個有意思的小案例來實際應用一下這兩個屬性。

案例: 制作一個特效,按方向鍵可以控制頁面上的盒子按對應的方向移動

<!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"><title>Document</title><style>* {margin: 0;padding: 0;}#box {width: 100px;height: 100px;background-color: orange;position: absolute;top: 200px;left: 200px;}</style>
</head><body><div id="box"></div><script>var oBox = document.getElementById('box');//定義兩個全局變量,分別表示盒子top屬性和left屬性var t = 200;var l = 200;//document對象的鍵盤按下事件監聽,即對用戶在整個網頁上按下按鍵時進行事件監聽document.onkeydown = function (e) {switch (e.keyCode) {case 37:l -= 3;break;case 38:t -= 3;break;case 39:l += 3;break;case 40:t += 3;break;}//更改樣式oBox.style.top = t + 'px';oBox.style.left = l + 'px';};</script>
</body>
</html>

image-20230420201100806

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166180.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166180.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166180.shtml

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

相關文章

進程已結束,退出代碼-1073741571 (0xC00000FD)

今天遇到了一個很邪門的問題&#xff0c;沒有報錯&#xff0c;只是提示“進程已結束,退出代碼-1073741571 (0xC00000FD)”。后來查資料說是棧溢出。 出問題的應該是上面這段代碼。 這里我想把一個128*128的矩陣進行剪枝操作。 傳入的128*128的矩陣太大了&#xff0c;兩組for循…

介紹GLFW庫和OpenGL和GLEW庫三者之間的關系

具體來說&#xff0c;OpenGL是一個開放的圖形庫&#xff0c;它規定了每個函數應該如何執行&#xff0c;以及它們的輸出值&#xff0c;但沒有具體實現。它提供了渲染2D和3D圖形的標準或規范。 GLEW&#xff0c;全稱OpenGL Extension Wrangler Library&#xff0c;是一個用于管理…

【Flink】狀態管理

目錄 1、狀態概述 1.1 無狀態算子 1.2 有狀態算子 2、狀態分類 ?編輯 2.1 算子狀態 2.1.1 列表狀態&#xff08;ListState&#xff09; 2.1.2 聯合列表狀態&#xff08;UnionListState&#xff09; 2.1.3 廣播狀態&#xff08;BroadcastState&#xff09; 2.2 按鍵分…

Redis Transaction事務

Redis 事務的目的是方便用戶一次執行多個命令。執行 Redis 事務可分為三個階段&#xff1a; 開始事務命令入隊執行事務 Redis事務特性 Redis 事務具有兩個重要特性&#xff1a; 1) 單獨的隔離操作 事務中的所有命令都會被序列化&#xff0c;它們將按照順序執行&#xff0c…

圖像標記上線,描點信息盡在掌握丨三疊云

圖像標記 路徑 表單設計 >> 組件 >> 增強組件 功能簡介 「圖像標記」字段是「增強字段」類型字段。用戶通過上傳圖片的方式構建一個背景圖片&#xff0c;并在構建的圖片背景上添加描點信息。搭配「儀表盤」中的「圖像軌跡」&#xff0c;可繪制出相應的數據軌跡…

界面組件DevExpress Reporting v23.1 - Web報表設計器功能升級

DevExpress Reporting是.NET Framework下功能完善的報表平臺&#xff0c;它附帶了易于使用的Visual Studio報表設計器和豐富的報表控件集&#xff0c;包括數據透視表、圖表&#xff0c;因此您可以構建無與倫比、信息清晰的報表 界面組件DevExpress Reporting v23.1已經發布一段…

基于JavaWeb+SSM+Vue微信閱讀小程序的設計和實現

基于JavaWebSSMVue微信閱讀小程序的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄[Java 源碼獲取 源碼獲取入口 Lun文目錄 第1章 緒論 1 1.1 課題背景 1 1.2 課題意義 1 1.3 研究內容 1 第2章 開發環境與技術 3 2.1 MYSQL數據庫 3 2.2 JSP技…

2016年8月15日 Go生態洞察:Go 1.7版本發布

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

解決traefik/nginx-ingress-controller配置正確的情況訪問域名仍然報錯: Connection Refused的問題

最近碰到一個很奇怪的問題&#xff1a; traefik/nginx-ingress-controller配置正確&#xff0c;但是訪問ingress配置的host域名就是死活報錯&#xff1a; Connection Refused 這樣怎么也找不到原因&#xff0c;然后一咬牙直接在其中一臺節點yum安裝nginx, 通過直接反向代理的方…

微信小程序開發資源匯總

本文收集了微信小程序開發過程中會使用到的資料、問題以及第三方組件庫。本文不是一篇關于如何學習微信小程序的入門指南&#xff0c;也非參考手冊&#xff0c;只是一些資料的整理。 本倉庫中的資料整理自網絡&#xff0c;也有一些來自網友的推薦。 官方文檔 小程序設計指南…

UE5 UI教程學習筆記

參考資料&#xff1a;https://item.taobao.com/item.htm?spma21n57.1.0.0.2b4f523cAV5i43&id716635137219&ns1&abbucket15#detail 基礎工程&#xff1a;https://download.csdn.net/download/qq_17523181/88559312 1. 介紹 工程素材 2. 創建Widget UE5 UI系統的…

那些被玩爛了的設計模式

單例模式 單例模式是指一個類在一個進程中只有一個實例對象&#xff08;但也不一定&#xff0c;比如Spring中的Bean的單例是指在一個容器中是單例的&#xff09; 單例模式創建分為餓漢式和懶漢式&#xff0c;總共大概有8種寫法。但是在開源項目中使用最多的主要有兩種寫法&am…

electron實現截圖的功能

Electron是一種跨平臺的桌面應用程序開發框架&#xff0c;可以使用HTML、CSS和JavaScript等Web技術構建桌面應用程序。下面是一種使用Electron實現截圖的簡單方法&#xff1a; 安裝Electron和截圖庫 首先&#xff0c;需要安裝Electron和一個截圖庫&#xff0c;例如electron-sc…

替換jar文件中的jar文件中的class

文件格式 testjar.jar在ruoyi.jar中。 AssetServiceImpl.class在testjar.jar 查找testjar.jar路徑 jar -tvf ruoyi.jar | grep testjar.jar 解析testjar.jar jar -xvf ruoyi.jar BOOT-INF/lib/testjar.jar 查找class文件路徑 jar -tvf testjar.jar | grep AssetServiceImp…

ELK: logstash gork filter 多個模式(pattern)匹配規則語法和多行日志匹配設置

項目里用logstash分析日志&#xff0c;由于有多種模式&#xff08;pattern&#xff09;需要匹配&#xff0c;網上搜了很多示例&#xff0c;發現這些都是老的寫法&#xff0c;都會報錯&#xff0c;后來查閱了官方文檔&#xff0c;才發現&#xff0c;新版本只支持新語法。 錯誤的…

【MISRA-C 2012】濃縮版解讀

文章目錄 1、前言2、簡介2.1、如何看待MISRA-C 20122.2、準則(guidelines)里面的指示(Directive)和規則(Rule)2.3、準則(guidelines)的級別(Category) 3、若干重要的Directive和Rule3.1、指示(Directive)Dir 2.1&#xff08;必要&#xff09; 所有的源文件編譯過程不得有編譯錯…

聚類筆記/sklearn筆記:Affinity Propagation親和力傳播

1 算法原理 1.1 基本思想 將全部數據點都當作潛在的聚類中心(稱之為 exemplar )然后數據點兩兩之間連線構成一個網絡( 相似度矩陣 )再通過網絡中各條邊的消息( responsibility 和 availability )傳遞計算出各樣本的聚類中心。 1.2 主要概念 Examplar聚類中心similarity S(i…

Java Excel Poi 單元格內置的數據格式

位置 //在類 org.apache.poi.ss.usermodel.BuiltinFormats 中的私有成員變量_formats中 private static final String[] _formats new String[]{"General", "0", "0.00", "#,##0", "#,##0.00", "\"$\"#,##…

【ARM CoreLink 系列 3.2 -- CCI-400,CCI-500, CCI-550 差異】

文章目錄 CCI-400 和 CCI-500 差異ARM CCI-400ARM CCI-500ARM CCI-550CCI-400 和 CCI-500 差異 ARM的 CCI(Cache Coherent Interconnect)系列產品是用于多核處理器之間的高性能緩存一致性互連。CCI-400 和 CCI-500 是該系列中的兩種設計,它們旨在允許多個處理器核心和其他資…

TopNet-(CVPR2023)前背景圖像合成

文章目錄 摘要引言算法架構結構損失函數 實驗數據集評估SOTA比較模型是否過擬合到修復區域泛化到真實圖片消融實驗 討論及結論限制 參考文獻 摘要 作者調研自動放置目標到背景進行圖像合成的問題。提供背景圖、分割的目標&#xff0c;訓練模型預測合理放置信息&#xff08;位置…