第四部分:進階 JavaScript 與網頁視覺動畫教學大綱
📅 發布時間: 2024-06-24 🏷️ 標籤: JavaScript, DOM 操作, 事件監聽, Canvas 動畫
在這個章節中,我們將介紹如何讓 JS 操作網頁的資料,比如說取得使用者讀取的資料、送出文件、修改文字之類的。
💻 網頁 DOM 操作
🎯 學習目標:理解 DOM 樹狀結構,並用getElementById取得元素修改元素樣式(如顏色)和內容(如innerText)處理使用者事件(如按鈕點擊addEventListener)讀取和清空輸入框值(value)
步驟 1: DOM 結構與樹狀結構
<!DOCTYPE html>
<html>
<head>
<title>我的網頁</title>
</head>
<body>
<h1>這是一個標題</h1>
<div>
<h2>這是一個小標題</h2>
<p>這是一段文字。</p>
</div>
</body>
</html>
圖: DOM 就像是網頁的地圖,讓我們可以找到網頁上的每個元素。可以把 DOM 想像成一棵大樹,每個元素都是這棵樹上的一個節點。
步驟 2: 為元素加上 id 屬性
// ... (前面的程式碼保持不變)
<div>
<h2 id="smallTitle">這是一個小標題</h2> // [新增] id 屬性,讓 JS 可以精準定位元素,因為 id 是元素的唯一標識
<p>這是一段文字。</p>
</div>
// ... (後面保持不變)步驟 3: 插入 <script> 標籤執行 JS
// ... (前面的程式碼保持不變)
<div>
<h2 id="smallTitle">這是一個小標題</h2>
<p>這是一段文字。</p>
</div>
<script> // [新增] <script> 標籤,讓 JS 在網頁載入時自動執行
console.log('Hi!'); // [新增] 在控制台輸出訊息,確認 JS 已運行
</script>
// ... (後面保持不變)
圖: 透過 F12 查看 console.log 輸出。
步驟 4: 使用 getElementById 取得元素
<script>
let smallTitleElement = document.getElementById("smallTitle"); // [新增] document.getElementById 用 id 精準找到元素,建立參考變數以便後續操作
</script>
圖: JS 已定位到小標題元素。
步驟 5: 修改元素樣式
<script>
let smallTitleElement = document.getElementById("smallTitle");
smallTitleElement.style.color = "red"; // [新增] 透過 style 屬性直接修改 CSS 顏色,讓元素視覺變化
</script>
圖: 小標題變成紅色。
步驟 6: 修改元素文字內容
<script>
let smallTitleElement = document.getElementById("smallTitle");
smallTitleElement.style.color = "red";
smallTitleElement.innerText = "這是一個紅色小標題"; // [新增] innerText 修改元素的文字內容,讓使用者看到即時變化
</script>
圖: 文字變成「這是一個紅色小標題」。
步驟 7: 新增按鈕元素處理事件
<div>
<h2 id="smallTitle">這是一個小標題</h2>
<p>這是一段文字。</p>
<button id="myButton">這是一個按鈕</button> // [新增] button 元素,用來捕捉使用者點擊事件
</div>
圖: 頁面新增按鈕。
步驟 8: 取得按鈕元素
<script>
// ... (smallTitleElement 相關程式碼保持不變)
let button = document.getElementById('myButton'); // [新增] 同樣用 getElementById 定位按鈕,為事件監聽做準備
</script>
圖: JS 已定位按鈕。
步驟 9: 新增點擊事件監聽
<script>
// ... (前面的程式碼保持不變)
let button = document.getElementById("myButton");
button.addEventListener("click", () => { // [新增] addEventListener 監聽 "click" 事件,當使用者點擊時執行回調函式
smallTitleElement.style.color = "blue"; // [新增] 在事件中修改顏色為藍色,實現互動
smallTitleElement.innerText = "這是一個藍色小標題"; // [新增] 在事件中更新文字,展示事件觸發效果
});
</script>
圖: 點擊按鈕後小標題變藍。
步驟 10: 新增輸入框
<div>
// ... (前面的元素保持不變)
<input id="myInput" type="text" placeholder="這是一個輸入框" /> // [新增] input 元素,讓使用者輸入文字
</div>
圖: 頁面新增輸入框。
步驟 11: 取得輸入框元素
<script>
// ... (前面的程式碼保持不變)
let myInputElement = document.getElementById("myInput"); // [新增] 定位輸入框,為讀取值做準備
</script>
圖: JS 已定位輸入框。
步驟 12: 讀取輸入值並更新顯示
<script>
// ... (前面的程式碼保持不變)
button.addEventListener("click", () => {
let inputValue = myInputElement.value; // [新增] .value 讀取輸入框內容,讓 JS 取得使用者資料
smallTitleElement.innerText = inputValue; // [新增] 將輸入值顯示到小標題,实现資料綁定
});
</script>
圖: 點擊後顯示輸入文字。
步驟 13: 清空輸入框
<script>
// ... (前面的程式碼保持不變)
button.addEventListener("click", () => {
let inputValue = myInputElement.value;
smallTitleElement.innerText = inputValue;
myInputElement.value = ""; // [新增] 設定 .value 為空字串,清空輸入框,提供更好使用者體驗
});
</script>
圖: 點擊後輸入框清空。
作業時間
試試看搭配 if else 語法做一個成績驗證系統
如果使用者輸入 大於等於 60 ,按下按鈕後會顯示文字 及格
如果使用者輸入 小於 60 ,按下按鈕後會顯示文字 不及格
💻 作業時間答案
步驟 1: 成績驗證系統完整範例
<!DOCTYPE html>
<html>
<head>
<title>我的網頁</title>
</head>
<body>
<input id="scoreInput" type="text" placeholder="輸入成績" />
<button id="checkButton">檢查分數</button>
<div id="myScoreState"></div>
<script>
let scoreInput = document.getElementById("scoreInput");
let checkButton = document.getElementById("checkButton");
let myScoreState = document.getElementById("myScoreState");
checkButton.addEventListener("click", function () {
let score = parseInt(scoreInput.value);
if (score >= 60) {
myScoreState.textContent = "恭喜你及格了!";
} else {
myScoreState.textContent = "抱歉你不及格!";
}
});
</script>
</body>
</html>Canvas
Canvas 是 Html 的元素 <canvas>
我們可以用 Canvas 來繪製圖形,就像用畫筆在畫布上畫畫一樣。
💻 Canvas 動畫入門
🎯 學習目標:新增 <canvas> 元素並取得 context設定畫筆顏色並繪製矩形步驟 1: 新增 Canvas 元素
<body>
<canvas id="myCanvas" width="400" height="400"></canvas> // [新增] <canvas> 元素,指定寬高作為繪圖畫布
</body>
圖: 400x400 空白畫布。
步驟 2: 取得 Canvas 元素
<script>
const canvas = document.getElementById("myCanvas"); // [新增] 用 getElementById 定位 canvas,為後續繪圖準備
</script>
圖: JS 已連結畫布。
步驟 3: 取得 2D 繪圖上下文
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d"); // [新增] getContext("2d") 取得 2D 畫筆,所有繪圖操作都透過 ctx 進行
</script>
圖: 畫筆已就緒。
步驟 4: 設定畫筆顏色
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
ctx.fillStyle = "blue"; // [新增] fillStyle 設定填充顏色,為後續形狀上色
</script>
圖: 畫筆顏色設為藍色。
步驟 5: 繪製矩形
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
ctx.fillStyle = "blue";
ctx.fillRect(50, 50, 150, 150); // [新增] fillRect(x, y, width, height) 從指定座標填充繪製矩形
</script>
圖: 藍色矩形出現在畫布上。