iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
佛心分享-IT 人自學之術

CSS破冰突圍:自學挑戰前端設計系列 第 10

Day10 : 滑鼠每一步皆有蹤跡:輕按或釋放,瞬間揭示一切

  • 分享至 

  • xImage
  •  

##每一次移動,背後都有一個隱形的追蹤者,時刻捕捉你的軌跡。

##為什麼要有這功能
滑鼠事件是網頁設計中的重要部分,允許開發者與使用者進行互動。透過這些事件,我們可以偵測滑鼠的動作,從而觸發動畫、顯示提示、開啟功能視窗,甚至改變元件樣式。這不僅提升了網站的互動性和動態效果,也能增強使用者體驗。特別是在用戶點擊、拖曳、或滾動操作時,滑鼠事件可以提供及時的回饋,讓操作更加直觀。

##核心結構
滑鼠事件主要分為幾類:
點擊類(如 click、dblclick):觸發使用者單擊或雙擊。
移動類(如 mousemove、mouseover、mouseleave):偵測滑鼠的移動狀態。
上下文事件(如 contextmenu):偵測滑鼠右鍵操作。
滾動類(如 wheel):偵測滑鼠滾輪的移動。
拖放事件(如 dragstart、drop):支持拖放功能。
這些事件可以單獨或組合使用,根據滑鼠操作對網頁元素進行精確控制。

##主要功能
點擊事件:偵測使用者的單擊或雙擊動作,適合啟動功能或提交表單。
移動事件:偵測滑鼠進入或離開元素,應用於動態顯示選單或提示。
右鍵選單:自定義使用者右鍵功能,提升網頁自定義操作。
滾輪事件:控制頁面滾動或縮放效果。
拖放功能:允許使用者拖曳元素,創造直觀的操作體驗。

##注意事項
1.跨瀏覽器兼容性:部分事件在不同瀏覽器上可能表現不一致,如 contextmenu 的預設行為差異較大,需考慮使用 event.preventDefault() 來進行兼容性處理。
2.性能問題:某些事件如 mousemove 會頻繁觸發,應避免在這類事件中執行大量計算,以免影響性能。
3.可訪問性:使用滑鼠事件時應考慮鍵盤使用者,為每個滑鼠操作提供對應的鍵盤操作選項。

##簡單範例應用

範例1

<button class="btn">Click Me</button>

<script>
  // 點擊事件
  document.querySelector('.btn').addEventListener('click', function() {
    alert('Button Clicked!'); // 當按鈕被點擊時,顯示提示框
  });

  // 滑鼠移入和移出事件
  document.querySelector('.btn').addEventListener('mouseover', function() {
    console.log('Mouse over button'); // 當滑鼠移到按鈕上時,顯示訊息
  });

  document.querySelector('.btn').addEventListener('mouseleave', function() {
    console.log('Mouse left button'); // 當滑鼠離開按鈕時,顯示訊息
  });

  // 右鍵選單事件
  document.querySelector('.btn').addEventListener('contextmenu', function(event) {
    event.preventDefault(); // 禁用預設右鍵選單
    alert('Custom Context Menu'); // 顯示自定義選單提示
  });
</script>


範例2

<!-- 按鈕定義,當觸發特定滑鼠事件時,會執行相應的 JavaScript 函式 -->
<button type="button" class="btn1" onmousedown="mouseDown()" onmouseup="mouseUp()" onmouseleave="mouseleave()">
  投票         
  <img class="vote_icon" src="../image/emotion-happy-line.png" id="vote_img" alt="Vote Icon">
</button>

<script>
// 當按下按鈕(btn1)時,會更改按鈕內嵌圖片的src

function mouseDown() { 
  // 取得按鈕內的圖片元素
  const voteImg = document.getElementById("vote_img");
  // 當按下按鈕時,將圖片的 src 更改為 'emotion-happy-line-1.png'
  voteImg.src = '../image/emotion-happy-line-1.png'; 
}

function mouseUp() {
  // 取得按鈕內的圖片元素
  const voteImg = document.getElementById("vote_img");
  // 當鬆開按鈕時,將圖片的 src 還原為原始圖像 'emotion-happy-line.png'
  voteImg.src = '../image/emotion-happy-line.png'; 
}

function mouseleave() {
  // 取得按鈕內的圖片元素
  const voteImg = document.getElementById("vote_img");
  // 當滑鼠離開按鈕時,將圖片的 src 還原為原始圖像 'emotion-happy-line.png'
  voteImg.src = '../image/emotion-happy-line.png'; 
}

</script>

上一篇
Day9 : 「滑過來,按一下」:觸動 Button 狀態變化的即時表演!
下一篇
Day11 : 隱形守護者:智慧防護的第一線,圖片浮水印默默捍衛作品
系列文
CSS破冰突圍:自學挑戰前端設計30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言