iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
自我挑戰組

JS漫遊記系列 第 27

JS漫遊記-27-背景變色

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20240908/20166952x41eTDokOQ.jpg

嗨嗨~今天又是假期的最後一天了~
大家有出門去踏踏青嗎~
今天也想說來個js的舉例小遊戲~
背景變色辣~

html



<html lang="en">
<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="colorButton">點擊我變色</button>
</body>
</html>



css


body {
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    background-color: #f0f0f0;
}

button {
    padding: 20px 40px;
    font-size: 16px;
    color: #fff;
    background-color: #007bff;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

button:hover {
    background-color: #0056b3;
}

js


document.getElementById('colorButton').onclick = () => {
    const randomColor = '#' + ('000000' + Math.floor(Math.random() * 0xFFFFFF).toString(16)).slice(-6);
    document.body.style.backgroundColor = randomColor;
};

document.getElementById('colorButton'):選擇 ID 為 colorButton 的按鈕元素。
.onclick = () => {...}:使用onclick的方法,按下去按鈕則可進行便),兼箭頭函數
document.body.style.backgroundColor = randomColor;:將生成的顏色設置為頁面的背景顏色。

以下都要來解釋一下,這段程式碼~
const randomColor = '#' + ('000000' + Math.floor(Math.random() * 0xFFFFFF).toString(16)).slice(-6);:生成六位數的隨機顏色代碼。


Math.random() * 0xFFFFFF
Math.random():這是一個內建的 JavaScript 函數,會返回一個在 [0, 1) 範圍內的隨機數(不包括 1)。
0xFFFFFF:這是十六進制表示的 16777215,對應於 RGB 顏色空間中的最大值(即 #FFFFFF,代表白色)。
Math.random() * 0xFFFFFF:生成一個從 0 到 16777215(即 0xFFFFFF)之間的隨機數。


Math.floor(...)
Math.floor():這個函數會對數字向下取整到最接近的整數。
Math.floor(Math.random() * 0xFFFFFF):將上述隨機數取到整數。


.toString(16)
.toString(16):將整數轉換為十六進制格式的字符串。16 代表十六進制進制。
(16制用來表示顯示顏色)


'000000' + ...
('000000' + ...):將生成的十六進制字符串前面加上 '000000',以確保即使生成的顏色代碼短於 6 位,最終的字符串長度也會達到 6 位。
例如,如果生成的顏色代碼是 'ff',則加上 '000000' 會變成 '000000ff'。


.slice(-6)
.slice(-6):從右邊截取最後 6 個字符。
如果生成的顏色代碼本來就是 6 位數,這一步就沒有影響;如果是 4 位數或更少,這一步會保證結果是 6 位數。例如 '0000ff' 被截取為 '0000ff',而 'ff' 被截取為 '0000ff'。


整體過程

  1. 生成隨機數:Math.random() * 0xFFFFFF 生成一個隨機的數字,範圍從 0 到 16777215。
  2. 轉換為整數:Math.floor(...) 將這個數字轉換為整數。
  3. 轉換為十六進制:.toString(16) 將這個整數轉換為十六進制字符串。
  4. 填充和截取:'000000' + ... 確保顏色代碼長度至少為 6 位,然後 .slice(-6) 截取最後 6 位,以獲取有效的顏色代碼。

範例
假設生成的隨機數字是 123456:

  1. Math.floor(123456):保持不變,得到 123456。
  2. 123456.toString(16):轉換為 '1e240'。
  3. '000000' + '1e240':得到 '000001e240'。
  4. '000001e240'.slice(-6):截取為 '1e240'。
  5. 最終,randomColor 將被設定為 '#1e240'。

我是超級新手,若有任何建議或是錯誤的部分,歡迎底下留言唷thanks
我們下篇文章見掰掰~

對自己多用點心,日益努力,而後風生水起。盡情玩耍,盡情學習,盡情熱愛,盡情討厭,在需要的時候釋放善意,在必要的時候展現強硬,把這不得不過完的一生,變成值得慶賀的一生。


上一篇
JS漫遊記-26-時間問候語
下一篇
JS漫遊記-28-背景變色(補充說明)
系列文
JS漫遊記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言