在昨天的文章中,我們學習了如何使用DOM(document.querySelector)去抓取網頁上的HTML標籤,並透過.style 成功改變了方塊的顏色,但昨天的做法是打開網頁,JavaScript就自動把顏色改掉了。
在實際的網頁中,我們更希望外觀的改變是由使用者來決定的,例如畫面上放一個按鈕,當使用者用滑鼠「點擊」這個按鈕時,方塊才觸發變色。
要讓網頁具備捕捉使用者動作的能力,我們就需要使用前端互動的核心技術:事件監聽(Event Listener)。
簡單來說,事件監聽就是幫網頁元件安裝一個「動作警報器」。
你告訴瀏覽器:「幫我注意這個按鈕。只要它觸發了特定的動作(例如被滑鼠點擊),就立刻去執行我指定好的那段函式(Function)。」
在JavaScript中,我們主要使用 addEventListener() 這個語法來安裝警報器。
安裝一個事件監聽需要三個核心要素:
目標元件.addEventListener("事件名稱", 要執行的函式);
"click"、滑鼠移入 "mouseover")<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>Day27 DOM 事件監聽實戰</title>
<style>
body {
display: flex;
flex-direction: column;
align-items: center;
font-family: Arial, sans-serif;
background-color: #f5f6fa;
padding-top: 50px;
}
/* 預設的方塊外觀灰色 */
.color-box {
width: 200px;
height: 200px;
background-color: #7f8c8d; /* 預設灰色 */
margin-bottom: 20px;
border-radius: 8px;
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
transition: background-color 0.4s ease;
}
/* 按鈕樣式 */
.btn {
padding: 10px 20px;
font-size: 1rem;
font-weight: bold;
background-color: #2c3e50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.btn:hover {
background-color: #34495e;
}
</style>
</head>
<body>
<!-- 定義網頁上的灰色方塊 -->
<div id="colorBlock" class="color-box"></div>
<!-- 定義觸發變色的按鈕 -->
<button id="changeBtn" class="btn">點我變色!</button>
<script>
// 先抓到網頁上的方塊與按鈕
const targetBox = document.querySelector("#colorBlock");
const actionBtn = document.querySelector("#changeBtn");
// 定義變色功能的函式
function changeToPurple() {
// 當這個功能被觸發時,把方塊的背景改成紫色
targetBox.style.backgroundColor = "#9b59b6";
}
// 幫按鈕安裝監聽警報器
// 告訴瀏覽器:當actionBtn被"click"(點擊)時,請執行changeToPurple函式
actionBtn.addEventListener("click", changeToPurple);
</script>
</body>
</html>


當你將這段程式碼在瀏覽器中打開時,網頁的互動邏輯如下:
changeToPurple函式被包在監聽器後面,此時還不會被啟動,方塊維持 CSS 設定的預設灰色。changeToPurple()。今天我們成功解鎖了前端網頁互動最重要的語法 addEventListener()(事件監聽),透過將DOM元素抓取、自訂函式與事件名稱(如click)綁定,我們終於做出了第一個真正可以跟使用者互動的動態網頁。
明天(Day 28),我們將要探討初學者在寫變數和函式時最容易踩到的邏輯地雷:作用域(Scope),去看看為什麼有時候在某些地方會莫名其妙抓不到自己宣告的變數,明天見。