【前端教程】從零開始學JavaScript交互:7個經典事件處理案例解析

在網頁開發中,交互性是提升用戶體驗的關鍵。JavaScript作為網頁交互的核心語言,通過事件處理機制讓靜態頁面"動"了起來。本文將通過7個經典案例,從簡單到復雜,逐步講解JavaScript事件處理的實現方法和應用場景。

案例1:點擊事件控制元素大小

這個案例展示了最基礎的點擊事件應用,通過點擊不同的div來控制目標元素的大小變化。

核心代碼實現

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>點擊控制元素大小</title>
<style>
#gaiBianWenZi{width: 400px; height: 20px;border: solid red 1px;text-align: center;line-height: 20px;cursor: pointer; /* 鼠標懸停顯示手型,提示可點擊 */
}#seKuai{width: 100px; height: 100px; background-color: red;margin: 20px auto; /* 居中顯示 */
}#huanYuanWenZi{width: 400px; height: 20px;border: solid green 1px;text-align: center;line-height: 20px;cursor: pointer;
}
</style><script>
// 改變元素大小的函數
function gaiBian(){var seKuai = document.getElementById("seKuai");seKuai.style.width = "200px";seKuai.style.height = "200px";
}// 還原元素大小的函數
function huanYuan(){var seKuai = document.getElementById("seKuai");seKuai.style.width = "100px";seKuai.style.height = "100px";
}
</script>
</head>
<body>
<div id="gaiBianWenZi" onclick="gaiBian()"> 點擊我改變div色塊大小
</div>
<div id="huanYuanWenZi" onclick="huanYuan()">還原div色塊大小
</div>
<div id="seKuai"></div>
</body>
</html>

關鍵知識點

  1. 事件綁定方式:使用onclick屬性在HTML標簽中直接綁定點擊事件
  2. DOM元素獲取:通過document.getElementById()方法獲取頁面元素
  3. 樣式修改:通過修改元素的style屬性來改變CSS樣式
  4. 用戶體驗提示:使用cursor: pointer提示元素可點擊

案例1擴展:同時控制大小和顏色

在基礎版的基礎上,這個擴展案例增加了顏色控制,展示了如何同時修改多個樣式屬性。

核心改進點

function ONCLICK(){var div1 = document.getElementById("div1");// 同時修改大小和顏色div1.style.width = "200px";div1.style.height = "200px";div1.style.backgroundColor = "blue"; // 改變背景色
}function huanYuan(){var div1 = document.getElementById("div1");// 還原為初始狀態div1.style.width = "100px";div1.style.height = "100px";div1.style.backgroundColor = "red";
}

擴展知識點

  1. 多屬性修改:可以同時修改元素的多個樣式屬性
  2. 命名規范:CSS中的background-color在JavaScript中需寫為backgroundColor(駝峰命名法)
  3. 元素選擇:除了div,其他元素(如p標簽)也可以綁定事件

案例2:鼠標懸停事件

這個案例展示了如何使用鼠標懸停(onmouseover)和鼠標離開(onmouseout)事件實現交互效果。

核心代碼

<div id="seKuai" onmouseover="gaiBian()" onmouseout="huanYuan()"></div><script>
function gaiBian(){var seKuai = document.getElementById("seKuai");seKuai.style.width = "200px";seKuai.style.height = "200px";
}function huanYuan(){var seKuai = document.getElementById("seKuai");seKuai.style.width = "100px";seKuai.style.height = "100px";
}
</script>

關鍵知識點

  1. 鼠標事件類型
    • onmouseover:鼠標移動到元素上時觸發
    • onmouseout:鼠標從元素上移開時觸發
  2. 即時反饋:這種交互方式能給用戶提供即時的視覺反饋,增強交互體驗
  3. 應用場景:常用于導航菜單、按鈕等元素的狀態提示

案例3:表單焦點事件

表單交互是網頁中最常見的交互場景之一,這個案例展示了如何使用焦點事件處理表單交互。

核心代碼

<br>用戶名稱:
<input type="text" id="txt1" onfocus="unameText()" onblur="tiShi1()" />
<span id="span1"></span><br>用戶密碼:
<input type="text" id="txt2" onfocus="upwdText()" onblur="tiShi2()" />
<span id="span2"></span><script>
// 獲取焦點時觸發:顯示輸入內容
function unameText(){var span1 = document.getElementById("span1");span1.innerHTML = document.getElementById("txt1").value;
}// 失去焦點時觸發:顯示提示信息
function tiShi1(){var span1 = document.getElementById("span1");span1.innerHTML = "失去焦點了哦";span1.style.color = "red";
}// 密碼框的類似處理...
function upwdText(){/* 略 */}
function tiShi2(){/* 略 */}
</script>

關鍵知識點

  1. 表單事件類型
    • onfocus:元素獲取焦點時觸發(如點擊輸入框)
    • onblur:元素失去焦點時觸發(如點擊輸入框外區域)
  2. 內容操作:使用innerHTML屬性修改元素內容
  3. 表單反饋:實時向用戶提供操作反饋,提升表單填寫體驗

案例4:文本選擇事件

這個案例展示了如何通過onselect事件響應文本選中操作。

核心代碼

<input type="text" id="txt1" onselect="xuanZhong(this)" /><script>
// 選中文本時觸發
function xuanZhong(chuanZhi){alert(chuanZhi.value); // 彈出選中的內容
}
</script>

關鍵知識點

  1. this關鍵字:代表當前觸發事件的元素,簡化代碼編寫
  2. 事件傳參:通過this將當前元素作為參數傳遞給處理函數
  3. 用戶輸入捕獲onselect事件可用于捕獲用戶選中的文本內容

案例5:下拉框改變事件

下拉選擇框(select)是常用的表單元素,onchange事件用于響應選項變化。

核心代碼

<select onchange="xuanZhong(this)"><option value="詩書畫唱">詩書畫唱</option><option value="三連">三連</option><option value="點贊">點贊</option>
</select><script>
function xuanZhong(chuanZhi){alert(chuanZhi.value); // 彈出選中的選項值
}
</script>

關鍵知識點

  1. onchange事件:當元素的值發生改變時觸發,常用于select、input等元素
  2. 選項值獲取:通過value屬性獲取選中項的值
  3. 表單聯動:這是實現表單元素聯動效果的基礎(如省市區三級聯動)

案例6:實時輸入統計

這個案例展示了如何實時監測用戶輸入,并進行字數統計,這在評論、留言等場景中非常實用。

核心代碼

<input type="text" onkeyup="tiShi(this)" />
<span id="spanId">你輸入了0個字</span><script>
function tiShi(chuanZhi){var ziShu = chuanZhi.value.length; // 獲取輸入長度var spanIdVar = document.getElementById("spanId");spanIdVar.innerHTML = "你輸入了" + ziShu + "個字";spanIdVar.style.color = "red";
}
</script>

關鍵知識點

  1. 鍵盤事件onkeyup在鍵盤按鍵松開時觸發,適合實時監測輸入
  2. 輸入長度計算:通過value.length獲取輸入內容的長度
  3. 實時反饋:提供即時的輸入反饋,增強用戶體驗
  4. 擴展應用:可用于實現輸入字數限制、實時搜索提示等功能

案例7:簡易計算器

這個案例綜合運用了前面介紹的多種事件處理方法,實現了一個簡單的計算器功能。

核心代碼

<input type="text" id="txtId1" />
<select id="selectId1"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option>
</select>
<input type="text" id="txtId2" />=
<input type="text" id="txtId3" />
<input type="button" value="計算結果" id="buttonId" /><script>
window.onload = function(){var buttonIdVar = document.getElementById("buttonId");buttonIdVar.onclick = function(){var txt1 = document.getElementById("txtId1");var txt2 = document.getElementById("txtId2");// 驗證輸入是否為數字if(!isNaN(txt1.value) && !isNaN(txt2.value)){var result = document.getElementById("txtId3");var select = document.getElementById("selectId1");var op = select.options[select.selectedIndex].value;// 根據選擇的運算符進行計算switch(op){case "+":result.value = Number(txt1.value) + Number(txt2.value);break;case "-":result.value = Number(txt1.value) - Number(txt2.value);break;case "*":result.value = Number(txt1.value) * Number(txt2.value);break;case "/":if(Number(txt2.value) == 0){alert("除數不能為0,請重新輸入");txt1.value = "";txt2.value = "";result.value = "";} else {result.value = Number(txt1.value) / Number(txt2.value);}break;}} else {alert("請輸入數字");txt1.value = "";txt2.value = "";}}
}
</script>

關鍵知識點

  1. 事件綁定方式:除了HTML屬性綁定,還可以通過JavaScript代碼動態綁定事件(buttonIdVar.onclick = function(){...}
  2. 頁面加載事件window.onload確保在頁面完全加載后再執行JavaScript代碼
  3. 數據驗證:使用isNaN()函數驗證輸入是否為有效數字
  4. 類型轉換:使用Number()將字符串轉換為數字進行計算
  5. 條件判斷與分支:綜合運用if-elseswitch進行邏輯處理
  6. 錯誤處理:對除數為0等異常情況進行處理

總結與擴展

通過這7個案例,我們學習了JavaScript中最常用的事件處理方法,包括:

  • 點擊事件(onclick)
  • 鼠標事件(onmouseover, onmouseout)
  • 焦點事件(onfocus, onblur)
  • 選擇事件(onselect)
  • 改變事件(onchange)
  • 鍵盤事件(onkeyup)

這些基礎事件是構建復雜交互的基石。在實際開發中,我們還可以:

  1. 使用更現代的事件綁定方式(addEventListener
  2. 實現事件委托,優化大量相似元素的事件處理
  3. 結合CSS過渡和動畫,創建更流暢的交互效果
  4. 使用框架(如Vue、React)的事件處理機制,提高開發效率

掌握事件處理是成為前端開發工程師的必備技能,希望這些案例能幫助你打下堅實的基礎,在實際項目中靈活運用,創造出優秀的用戶體驗。

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

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

相關文章

內存模型(Memory Model)是什么?

內存模型(Memory Model)是什么? 內存模型是一個非常深刻且核心的計算機科學概念。 核心摘要 內存模型是一個契約或協議,它精確定義了: 一個線程對共享內存的寫操作,如何以及何時對其他線程可見。 內存操作(讀/寫)可以被重新排序的程度。 它連接了硬件(CPU如何執行指令…

在 MyBatis 中oracle基本數值類型的 JDBC 類型映射

基本數值類型的 JDBC 類型Java 類型JDBC 類型 (jdbcType)說明int / IntegerINTEGER標準整數類型long / LongBIGINT大整數類型short / ShortSMALLINT小整數類型float / FloatFLOAT單精度浮點數double / DoubleDOUBLE雙精度浮點數java.math.BigDecimalDECIMAL高精度小數&#xff…

Spring注解演進與自動裝配原理深度解析:從歷史發展到自定義Starter實踐

目錄 Spring注解發展史 Spring 1.X Spring 2.X Spring 2.5之前 Required Repository Aspect Spring2.5 之后 Spring 3.x ComponentScan Import 靜態導入 ImportSelector ImportBeanDefinitionRegistrar EnableXXX Spring 4.x Spring 5.x 什么是SPI 自動裝配…

第三屆機械工程與先進制造智能化技術研討會(MEAMIT2025)

【重要信息】 大會官網&#xff1a;https://www.yanfajia.com/action/p/BYE27DYDhttps://www.yanfajia.com/action/p/BYE27DYD 會議地點&#xff1a;哈爾濱理工大學 論文檢索&#xff1a;EI Compendex、Scopus 還有部份版面&#xff0c;欲投稿從速&#xff0c;即將提交出版…

筆記本電腦頻繁出現 vcomp140.dll丟失怎么辦?結合移動設備特性,提供適配性強的修復方案

對于需要用電腦處理工作的人來說&#xff0c;“vcomp140.dll 丟失” 導致程序頻繁閃退&#xff0c;無疑會嚴重影響工作效率。嘗試重啟電腦、重新安裝軟件后&#xff0c;問題依然存在&#xff0c;這時候該怎么辦&#xff1f;別著急&#xff0c;vcomp140.dll 丟失看似棘手&#x…

微動開關-電競鼠標核心!5000萬次壽命微動開關評測

一、主流電競微動開關技術對比?光磁微動技術?采用非接觸式光學觸發原理理論壽命突破5000萬次觸發響應速度0.2ms??傳統機械微動?歐姆龍D2FC-F-7N系列5000萬次標稱壽命機械結構簡單可靠??創新結構微動?雙飛燕漆藍熒光微動特殊涂層提升耐久性手感反饋獨特?二、5000萬次壽…

Go語言與Docker 開發的核心應用領域

1. 容器化應用構建與部署??輕量化鏡像構建Go 語言編譯生成靜態二進制文件&#xff0c;結合多階段構建的 Dockerfile&#xff0c;可大幅縮小鏡像體積&#xff08;例如使用 scratch 或 alpine 基礎鏡像&#xff09;&#xff0c;提升部署效率?。示例 Dockerfile 片段&#xff1…

【ESP32-IDF】網絡連接開發2:Wi?Fi 智能配網(SmartConfig)

系列文章目錄 持續更新… 文章目錄系列文章目錄前言一、Wi?Fi 智能配網概述1.SmartConfig 簡介2.SmartConfig 工作原理3.SmartConfig 協議類型二、Wi?Fi 智能配網類型定義及相關API三、Wi?Fi 智能配網示例程序總結前言 在物聯網設備開發過程中&#xff0c;如果將 Wi-Fi 的…

CVPR深度學習研究指南:特征提取模塊仍是論文創新難點

關注gongzhonghao【CVPR頂會精選】在深度學習賽道里&#xff0c;別只盯著堆模型卷參數了。最近不少高分工作都在打“可解釋”這張牌&#xff0c;把原本難以理解的黑箱模型用輕量方法剖開&#xff0c;既能增強學術價值&#xff0c;還能拓展落地場景。更妙的是&#xff0c;這類研…

redis----list詳解

列表&#xff08;List&#xff09;相當于數組或者順序表一、通用命令LPUSH key value1 [value2 ...]在列表 key 的左側&#xff08;頭部&#xff09;插入一個或多個值。示例&#xff1a;LPUSH fruits apple banana → 列表變為 [banana, apple]LPUSHX 只有列表已存在時才會執行…

【python】相機輸出圖片時保留時間戳數據

有時候需要參考時間戳&#xff0c;寫個筆記記錄下 但是輸出時間可能不穩&#xff0c;有待進一步優化 import cv2 import time import os# 創建一個保存圖像的文件夾 output_folder "camera_images" if not os.path.exists(output_folder):os.makedirs(output_folder…

(Nginx)基于Nginx+PHP 驅動 Web 應用(上):配置文件與虛擬主機篇

1.應用場景 主要用于學習基于 Nginx PHP 驅動 Web 應用&#xff08;上&#xff09;&#xff1a; 配置文件與虛擬主機篇&#xff0c;學習弄清楚Nginx的常規操作&#xff0c;之前困惑的地方。 本文主要介紹了基于NginxPHP驅動Web應用的配置方法&#xff0c;重點講解了Nginx配置…

【golang長途旅行第34站】網絡編程

網絡編程 基本介紹核心主題&#xff1a;?? Golang面向大規模后端服務程序的設計目標中&#xff0c;網絡通信是必不可少且至關重要的部分。?兩種網絡編程方式&#xff1a;???TCP Socket編程? ?性質&#xff1a;網絡編程的主流 ?底層協議&#xff1a;基于TCP/IP協議 ?舉…

Hadoop(六)

目錄&#xff1a;1.Hadoop概述2.為什么需要分布式存儲3.分布式的基礎架構分析4.HDFS的基礎架構1.Hadoop概述2.為什么需要分布式存儲3.分布式的基礎架構分析4.HDFS的基礎架構

Oracle 12g安裝

1. 下載地址 官方網站 一般這種導向的進入的都是oracle的官方網站(先登錄&#xff0c;如果沒有就創建賬號)&#xff0c;并沒有真實的12g供你下載。需要你轉入Oracle的云中下載&#xff1a;https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 。我選擇的是12.1.0.2.0下…

ros2--service/服務--接口

獲取service名稱const char *get_service_name() const;std::string client_name client_->get_service_name();RCLCPP_INFO(this->get_logger(), "Client name: %s", client_name.c_str());

安卓開發---SimpleAdapter

概念&#xff1a;SimpleAdapter 是 Android 中比 ArrayAdapter 更強大的適配器&#xff0c;用于將復雜的數據綁定到復雜的布局&#xff0c;支持將 Map 中的數據映射到布局中的多個 View。方法簽名&#xff1a;public SimpleAdapter( Context context, //上下文 List<? exte…

軟考-系統架構設計師 辦公自動化系統(OAS)詳細講解

個人博客&#xff1a;blogs.wurp.top 一、OAS的核心概念與演進 1. 什么是OAS&#xff1f; OAS是一個綜合性的信息系統&#xff0c;它利用計算機技術、通信技術、系統科學和行為科學&#xff0c;為組織的日常辦公事務、信息管理和協同工作提供支持。其本質是將傳統辦公流程電…

leetcode 155 官方golang標準答案錯誤

真是誤人子弟&#xff0c;leetcode155題官網的golang答案是錯誤的。push方法的append操作&#xff0c;必然不能保證是o(1)的時間復雜度。就這還是官網的標準答案&#xff0c;就這水平&#xff0c;&#x1f604;leetcode誤人子弟不是第一次了。光會刷算法&#xff0c;可惜水平還…

開源 python 應用 開發(十三)AI應用--百度智能云TTS語音合成

最近有個項目需要做視覺自動化處理的工具&#xff0c;最后選用的軟件為python&#xff0c;剛好這個機會進行系統學習。短時間學習&#xff0c;需要快速開發&#xff0c;所以記錄要點步驟&#xff0c;防止忘記。 鏈接&#xff1a; 開源 python 應用 開發&#xff08;一&#xf…