HTML/CSS 魔法第二彈:會逃跑的調皮按鈕(懸停自動閃避)

引言

在網頁設計中,交互性是吸引用戶的關鍵因素之一。普通的按鈕在用戶懸停時可能只是顏色或樣式發生改變,但今天我們要創造一個 “調皮” 的按鈕,當用戶鼠標懸停在上面時,它會自動閃避,仿佛在和用戶玩游戲。本文將詳細介紹如何使用 HTML 和 CSS 實現這個有趣的效果。

實現思路

要實現會逃跑的調皮按鈕,我們的核心思路是利用 CSS 的?position?屬性和?transform?屬性,結合 JavaScript 監聽鼠標事件。當鼠標懸停在按鈕上時,通過 JavaScript 動態改變按鈕的位置,從而實現按鈕的閃避效果。

代碼實現步驟

1. HTML 結構搭建

首先,我們需要創建一個基本的 HTML 結構,包含一個按鈕元素。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>會逃跑的調皮按鈕</title><link rel="stylesheet" href="styles.css">
</head><body><button id="naughty-button">來抓我呀!</button><script src="script.js"></script>
</body></html>

在這段 HTML 代碼中:

  • <!DOCTYPE html>?聲明文檔類型為 HTML5。
  • <meta>?標簽設置字符編碼和視口,確保頁面在不同設備上正確顯示。
  • <title>?標簽設置頁面標題。
  • <link>?標簽引入外部的 CSS 文件?styles.css,用于樣式設置。
  • <button>?標簽創建了一個按鈕,其?id?為?naughty-button,方便后續在 CSS 和 JavaScript 中引用。
  • <script>?標簽引入外部的 JavaScript 文件?script.js,用于實現按鈕的閃避邏輯。

2. CSS 樣式設計

接下來,我們使用 CSS 為按鈕設置基本樣式,并將其定位在頁面中心。

body {display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;background-color: #f0f0f0;
}#naughty-button {padding: 10px 20px;font-size: 18px;border: none;border-radius: 5px;background-color: #007BFF;color: white;cursor: pointer;position: relative;transition: transform 0.3s ease;
}

在這段 CSS 代碼中:

  • body?元素使用 Flexbox 布局,將內容在水平和垂直方向上居中顯示,同時設置背景顏色。
  • #naughty-button?選擇器針對按鈕進行樣式設置:
    • padding?設置按鈕內邊距。
    • font-size?設置字體大小。
    • border?去除邊框。
    • border-radius?設置圓角。
    • background-color?和?color?設置背景色和文字顏色。
    • cursor?設置鼠標指針樣式為手型。
    • position: relative?使按鈕可以相對于其正常位置進行定位。
    • transition?為按鈕的?transform?屬性添加過渡效果,使按鈕移動更加平滑。

3. JavaScript 實現閃避邏輯

最后,我們使用 JavaScript 監聽鼠標懸停事件,并在鼠標懸停時隨機改變按鈕的位置。

const naughtyButton = document.getElementById('naughty-button');naughtyButton.addEventListener('mouseover', () => {const maxX = window.innerWidth - naughtyButton.offsetWidth;const maxY = window.innerHeight - naughtyButton.offsetHeight;const randomX = Math.random() * maxX;const randomY = Math.random() * maxY;naughtyButton.style.transform = `translate(${randomX}px, ${randomY}px)`;
});

在這段 JavaScript 代碼中:

  • const naughtyButton = document.getElementById('naughty-button');?獲取按鈕元素。
  • naughtyButton.addEventListener('mouseover', () => { ... });?監聽按鈕的鼠標懸停事件。
  • 在事件處理函數中,計算按鈕在頁面內可移動的最大 X 和 Y 坐標。
  • Math.random()?生成隨機數,結合最大坐標,得到隨機的 X 和 Y 位置。
  • naughtyButton.style.transform =?translate(${randomX}px, ${randomY}px);?使用?transform?屬性將按鈕移動到隨機位置。

完整代碼

HTML 代碼(index.html)

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>會逃跑的調皮按鈕</title><link rel="stylesheet" href="styles.css">
</head><body><button id="naughty-button">來抓我呀!</button><script src="script.js"></script>
</body></html>

CSS 代碼(styles.css)

body {display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;background-color: #f0f0f0;
}#naughty-button {padding: 10px 20px;font-size: 18px;border: none;border-radius: 5px;background-color: #007BFF;color: white;cursor: pointer;position: relative;transition: transform 0.3s ease;
}

JavaScript 代碼(script.js)

const naughtyButton = document.getElementById('naughty-button');naughtyButton.addEventListener('mouseover', () => {const maxX = window.innerWidth - naughtyButton.offsetWidth;const maxY = window.innerHeight - naughtyButton.offsetHeight;const randomX = Math.random() * maxX;const randomY = Math.random() * maxY;naughtyButton.style.transform = `translate(${randomX}px, ${randomY}px)`;
});

總結

通過結合 HTML、CSS 和 JavaScript,我們成功實現了一個會逃跑的調皮按鈕。這個項目不僅展示了如何利用基本的前端技術實現有趣的交互效果,還能激發我們在網頁設計中發揮更多創意。你可以根據自己的需求對按鈕的樣式和閃避邏輯進行進一步的修改和擴展,創造出更加獨特的交互體驗。

將上述代碼分別保存為?index.htmlstyles.css?和?script.js?文件,確保它們在同一目錄下,然后在瀏覽器中打開?index.html?文件,就可以看到調皮按鈕的閃避效果啦!

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

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

相關文章

**Java面試:技術大比拼**

互聯網大廠Java面試&#xff1a;一場嚴肅與搞笑交織的技術拷問 場景&#xff1a;互聯網大廠面試間 面試官&#xff08;嚴肅&#xff09;&#xff1a;請坐。馬小帥&#xff0c;我們今天主要考察一下你在Java技術棧上的掌握程度&#xff0c;以及如何將這些技術應用于實際業務場景…

25考頻高的前端面試題

請求失敗會彈出一個toast&#xff0c;如何保證批量請求失敗&#xff0c;只彈出一個toast 設置全局標志位&#xff0c;定義一個全局變量&#xff08;如isToastShown)來表示是否已經彈出過toast。在請求失敗的處理邏輯中&#xff0c;首先檢查該標志位。如果尚未彈出toast&#xf…

命令模式(Command Pattern)詳解

文章目錄 1. 什么是命令模式?2. 為什么需要命令模式?3. 命令模式的核心概念4. 命令模式的結構5. 命令模式的基本實現5.1 簡單的燈光控制示例5.2 家電控制示例6. 帶有撤銷功能的命令模式6.1 修改命令接口6.2 實現可撤銷的燈光命令6.3 實現可撤銷的風扇命令6.4 修改調用者,支持…

《Vue3學習手記8》

vue3中的一些API shallowRef ( ) 和shallowReactive ( ) shallowRef (淺層響應式) 1.作用:創建一個響應式數據&#xff0c;但只對頂層屬性進行響應式處理。 2.用法: const originalref(...) const original2shallowRef(original) 3.特點:只跟蹤引用值的變化&#xff0c;不關心…

雙列集合——map集合和三種遍歷方式

雙列集合的特點 鍵和值一一對應&#xff0c;每個鍵只能對應自己的值 一個鍵和值整體稱為鍵值對或鍵值對對象&#xff0c;java中叫做entry對象。 map常見的api map接口中定義了雙列集合所有的共性方法&#xff0c;下面三個實現類就沒有什么額外新的方法要學習了。 map接口…

Linux安裝部署Postgresql數據庫

聯網安裝方案 Linux能在線安裝依賴組件的前提下&#xff0c;可以快速安裝部署PG數據庫&#xff0c;安裝過程使用root管理員帳號&#xff1a; 首先&#xff0c;使用如下命令自動下載Postgresql組件&#xff1a; # 在openEuler、Fedora或CentOS 8上&#xff0c;你可能會使用&a…

供應鏈算法整理(二)--- 智能補貨

供應鏈業務的目標價值是&#xff1a;優化貨品的供給、銷售提供支撐&#xff0c;以降低成本&#xff0c;提高時效、收益&#xff0c;最終提升用戶體驗。基于目標價值&#xff0c;整體的算法模塊分為&#xff1a;智能選品、智能預測、品倉鋪貨、智能補貨、智能調撥、倉網路由、快…

vscode 個性化

vscode 個性化 設置 吸頂效果 使用前使用后 設置方法 VS Code 的粘性滾動預覽 - 類似于 Excel 的凍結首行 插件 代碼片段分享 - CodeSnap 使用方式 CtrlShiftP輸入CodeSnap 喚起插件選擇代碼 行內報錯提示 - Error Lens 使用前使用后 VSCode Error Lens插件介紹&…

Rockermq的部署與使用(0-1)

?RocketMQ? 是阿里巴巴開源的一款 ?分布式消息中間件&#xff0c;具有高吞吐、低延遲、高可用等特點&#xff0c;廣泛應用于多個領域&#xff0c;包括異步通信解耦、企業解決方案、金融支付、電信、電子商務、快遞物流、廣告營銷、社交、即時通信、移動應用、手游、視頻、物…

軟件測試報告機構如何保障軟件質量并維護其安全性?

軟件測試報告機構在軟件開發流程里起著十分關鍵的作用&#xff0c;它可以保障軟件的質量&#xff0c;它還能夠維護軟件的安全性。下面&#xff0c;我們就來深入了解一下這類機構。 機構作用 軟件測試報告機構是軟件質量的“把關者”&#xff0c;能對軟件進行全面評估&#xf…

4個純CSS自定義的簡單而優雅的滾動條樣式

今天發現 uni-app 項目的滾動條不顯示&#xff0c;查了下原來是設置了 ::-webkit-scrollbar {display: none; } 那么怎么用 css 設置滾動條樣式呢&#xff1f; 定義滾動條整體樣式? ::-webkit-scrollbar 定義滾動條滑塊樣式 ::-webkit-scrollbar-thumb 定義滾動條軌道樣式?…

ES6入門---第二單元 模塊五:模塊化

js不支持模塊化 注意&#xff1a; 需要放到服務器環境 1、如何定義模塊&#xff1f; export 東西 例&#xff1a;1.js文件中 console.log(1模塊加載了);//顯示是否加載了 export const a 12; export const b 5; export let c 101; const a12; const b5; const c101;ex…

14.Excel:排序和篩選

一 位置 兩個位置。 二 排序&#xff1a;如何使用 1.常規使用 補充&#xff1a;不彈出排序提醒排序。 選中要排序列中的任意一個單元格&#xff0c;然后排序。 2.根據要求進行排序 1.根據姓名筆畫進行降序排序 要勾選上數據包含標題&#xff0c;默認是勾選了。 2.根據運營部、…

嵌入式系統基礎知識

目錄 一、馮諾依曼結構與哈佛結構 &#xff08;一&#xff09;馮諾依曼結構 &#xff08;二&#xff09;哈佛架構 二、ARM存儲模式 &#xff08;一&#xff09;大端模式 &#xff08;二&#xff09;小端模式 &#xff08;三&#xff09;混合模式 三、CISC 與 RISC &am…

CSS 預處理器 Sass

目錄 Sass 一、Sass 是什么&#xff1f; 二、核心功能詳解 1. 變量&#xff08;Variables&#xff09; 2. 嵌套&#xff08;Nesting&#xff09; 3. 混合宏&#xff08;Mixins&#xff09; 4. 繼承&#xff08;Inheritance&#xff09; 5. 運算&#xff08;Operations&…

信息收集新利器:SSearch Chrome 插件來了

SSearch 下載地址 SSearch &#x1f623;用途 每次谷歌語法搜索時還得自己寫&#xff0c;我想省事一點&#xff0c;弄了一個插件&#xff0c;先加了幾個常用的語法&#xff0c;點擊后會跳轉到對應搜索頁面&#xff0c;也可以直接在搜索框微調 后續也會加些其他語法 &#…

Docker搭建SFTP

在這個教程中&#xff0c;我們將通過一個簡單的例子來展示如何使用 Docker 和 atmoz/sftp 鏡像設置一個基本的 SFTP 服務。這個服務將允許用戶通過 SFTP 安全地訪問和管理文件。我們將配置一個名為 ops 的用戶&#xff0c;其密碼為 123456&#xff0c;并限定用戶只能訪問特定的…

正態分布習題集 · 答案與解析篇

正態分布習題集 答案與解析篇 與題目篇編號一致,如有其他解題思路,歡迎在評論區交流。 1. 基礎定義與性質 1.1 密度函數 X ~ N ( μ , σ 2 ) X \sim N(\mu,\sigma^2) X~N(μ,σ2) 的 PDF: [ f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)2}{2\sigma2}\…

Java學習手冊:SQL 優化技巧

一、SQL 查詢優化 選擇合適的索引列 &#xff1a;索引可以顯著提高查詢速度&#xff0c;但需要選擇合適的列來創建索引。通常&#xff0c;對于頻繁作為查詢條件的列、連接操作的列以及排序或分組操作的列&#xff0c;應該考慮創建索引。例如&#xff0c;在一個訂單表中&#xf…

(02)Redis 的訂閱發布Pub/Sub

我們為了自己實現一個MQ功能&#xff0c;就要深入底層挖掘現有開源產品的實現過程。 Redis 發布訂閱底層結構解析 Redis 不存儲消息&#xff0c;僅作為“實時中轉”&#xff1b;只有訂閱者在線時才能收到消息&#xff1b;消息是廣播給所有訂閱此頻道的客戶端。 1. 核心數據結…