RGB to HEX

更新於 發佈於 閱讀時間約 8 分鐘

如果製作一個RGB色碼轉換器,算是考驗操作DOM!
那把它分成三個目標來依序完成,

  1. 抓slider的數字,存放在每個滑塊右邊的格子
  • 透過 slider.addEventListener("input", function (event) {...}) 監聽滑塊變動事件。
  • 當事件被觸發時,取得事件目標元素,就是滑塊 let target = event.target
  • 獲得滑塊的當前值 let inputValue = target.value
  • 找到與該滑塊相鄰的 span 元素 let valueBox = target.nextElementSibling
  • 將滑塊的值顯示在相鄰的 span 元素中 valueBox.textContent = inputValue


  1. 再slider的數字轉換成十六進位並顯示於下面的格子
  • 根據滑塊的 ID#rgb-r#rgb-g#rgb-b,確定是哪個滑塊的值被改變。
  • 將該滑塊的數值轉換成十六進位。若數值小於 16,則在前面補 0 以確保每個數值都是兩位數 hex[0] = "0" + Number(target.value).toString(16)hex[0] = Number(target.value).toString(16)
  • 更新對應的十六進位數值陣列 hex 中的值。
  • 組合成完整的十六進位色碼字串 newHexCode = "#" + hex[0] + hex[1] + hex[2]
  • 將十六進位色碼顯示在頁面下方的大格子中 hexCode.textContent = newHexCode


3. background-color會監聽格子裡的RGB色碼而改變


  • 在更新 HEX 色碼字串後,將色碼設置為頁面的背景顏色 document.body.style.backgroundColor = hexCode.textContent


以下示範請看~~


raw-image


<body>
<div class="slider">
<h1> RGB to HEX </h1>
<div>
<span class="red"> R </span>
<input type="range" id="rgb-r" name="rgb-r" min="0" max="255" value="0">
<span class="red" id="red"> 0 </span>
</div>

<div>
<span class="green">G</span>
<input type="range" id="rgb-g" name="rgb-g" min="0" max="255" value="0">
<span class="green" id="green"> 0 </span>
</div>

<div>
<span class="blue">B</span>
<input type="range" id="rgb-b" name="rgb-b" min="0" max="255" value="0">
<span class="blue" id="blue"> 0 </span>
</div>

<div>
<h1 class="hexCode">#000000</h1>
</div>
</div>

<body>


body {
font-family: "Roboto", sans-serif;
background-color: black;
font-weight: bold;
}

nav {
padding-top: 10px;
font-size: 20px;
}

.slider {
height: 500px;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
}
.red {
border-radius: 20%;
padding: 10px;
background-color: red;
}

.green {
padding: 10px;
background-color: green;
border-radius: 20%;
}

.blue {
padding: 10px;
background-color: blue;
border-radius: 20%;
}

h1 {
color: #ffffff;
background-color: rgba(210, 155, 155, 0.5);
border: 2px solid #000000;
border-radius: 8px;
margin: 10px 10px;
padding: 5px 30px;
}


const slider = document.querySelector(".slider");
const hexCode = document.querySelector(".hexCode");
let newHexCode = "";
let hex = ["00", "00", "00"];

slider.addEventListener("input", function (event) {
let target = event.target;
let inputValue = target.value;
let valueBox = target.nextElementSibling; // 滑塊後的 span
valueBox.textContent = inputValue;
if (target.matches("#rgb-r")) {
if (target.value < 16) {
hex[0] = "0" + Number(target.value).toString(16);
} else {
hex[0] = Number(target.value).toString(16);
}
} else if (target.matches("#rgb-g")) {
if (target.value < 16) {
hex[1] = "0" + Number(target.value).toString(16);
} else {
hex[1] = Number(target.value).toString(16);
}
} else {
if (target.value < 16) {
hex[2] = "0" + Number(target.value).toString(16);
} else {
hex[2] = Number(target.value).toString(16);
}
}
newHexCode = "#" + hex[0] + hex[1] + hex[2];
hexCode.textContent = newHexCode;
document.body.style.backgroundColor = hexCode.textContent;
});




avatar-img
3會員
17內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
郭欣玫的沙龍 的其他內容
以下展示三種置中方法 : <div class="method-container"> <div class="method-title">Flexbox</div> <div class="box"> <div class="dot"></div> </div> </di
一般而言,組件之間的資料傳遞,可以使用 props 來達成,不過一旦層級過多的時候,props 就要逐層向下傳遞,會越來越麻煩且複雜。 而 provide、inject 可以解決這個問題,它可以提供一個「源頭」,子組件們可以藉由同一個源頭取得對應的資料,且沒有層級分別,都可以取得,就不用逐層傳遞資
當 父組件 有數據想傳送到 子組件 就可以使用props 1​. 父層傳遞設置 可以在父組件的屬性給予一個值,當作要傳送到子組件的資料。 父層組件​ : <!-- App.vue (父組件) --> <template> <div> <ChildComponent greetin
CSS Box Model 是在 CSS 裡面,html 的每個元素都可被視作為一個盒子,然後可以針對這個盒子去做調整,看以下圖片: 簡單來說margin就是一個是外邊距,與外層元素的間距 Margin 用於控制元素與其周邊元素的間隔,可以設定為正數(增加與其他元素的距離)、負數(減少與其他
今天來介紹一下比較常用的4種定位方式 其中讓我最搞混的是relative跟absolute position: relative 還未定top, bottom, left, right 的屬性時,預設會套用position:static,但如果你去設定了top, bottom, left, ri
以下展示三種置中方法 : <div class="method-container"> <div class="method-title">Flexbox</div> <div class="box"> <div class="dot"></div> </div> </di
一般而言,組件之間的資料傳遞,可以使用 props 來達成,不過一旦層級過多的時候,props 就要逐層向下傳遞,會越來越麻煩且複雜。 而 provide、inject 可以解決這個問題,它可以提供一個「源頭」,子組件們可以藉由同一個源頭取得對應的資料,且沒有層級分別,都可以取得,就不用逐層傳遞資
當 父組件 有數據想傳送到 子組件 就可以使用props 1​. 父層傳遞設置 可以在父組件的屬性給予一個值,當作要傳送到子組件的資料。 父層組件​ : <!-- App.vue (父組件) --> <template> <div> <ChildComponent greetin
CSS Box Model 是在 CSS 裡面,html 的每個元素都可被視作為一個盒子,然後可以針對這個盒子去做調整,看以下圖片: 簡單來說margin就是一個是外邊距,與外層元素的間距 Margin 用於控制元素與其周邊元素的間隔,可以設定為正數(增加與其他元素的距離)、負數(減少與其他
今天來介紹一下比較常用的4種定位方式 其中讓我最搞混的是relative跟absolute position: relative 還未定top, bottom, left, right 的屬性時,預設會套用position:static,但如果你去設定了top, bottom, left, ri
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
本章介紹了 CSS 中的顏色和背景屬性,包括文本顏色的設置方法、背景顏色和背景圖片的應用、背景重複和位置的配置,以及線性漸變和徑向漸變的使用。這些知識將幫助你更靈活地設計和美化網頁。
Thumbnail
題目敘述 Sort Colors 給定一個色彩陣列,裡面的顏色包含0紅色,1白色,2藍色。 要求我們透過in-place操作,把色彩陣列依序從左到右排好, 依序出現的是紅色、白色、藍色。
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 透過 JS 控制 CSS 變數 今天的挑戰是要能透過滑動圖片上面的 <input type="range"> 來改變圖片的三個屬性。 以前在 CSS 裡面看到 var(--xxxx) 這種東西都很
Thumbnail
透明立體方練習,使用AI向量繪圖軟體
Thumbnail
Creative Coding 作品變化概念,有或沒有的差別,隨機性,色彩模式的調整...等
Thumbnail
這是個自己學習的紀錄,可能會有點枯燥,但忘了時能夠當作查詢資料用:)
Thumbnail
在數位設計的世界中,我們總是被色彩所包圍,而其中一個關鍵的元素就是色彩描述檔(又稱:描述檔、ICC色彩描述檔)。 它是一個將印表機、螢幕等裝置具備的色域資訊數值化的檔案唷!或許你也曾經思考過,當我們看到[R:0/G:0/B:255]或是[C:100%/M:100%/Y:0%]這樣的數值時,心中
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
本章介紹了 CSS 中的顏色和背景屬性,包括文本顏色的設置方法、背景顏色和背景圖片的應用、背景重複和位置的配置,以及線性漸變和徑向漸變的使用。這些知識將幫助你更靈活地設計和美化網頁。
Thumbnail
題目敘述 Sort Colors 給定一個色彩陣列,裡面的顏色包含0紅色,1白色,2藍色。 要求我們透過in-place操作,把色彩陣列依序從左到右排好, 依序出現的是紅色、白色、藍色。
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 透過 JS 控制 CSS 變數 今天的挑戰是要能透過滑動圖片上面的 <input type="range"> 來改變圖片的三個屬性。 以前在 CSS 裡面看到 var(--xxxx) 這種東西都很
Thumbnail
透明立體方練習,使用AI向量繪圖軟體
Thumbnail
Creative Coding 作品變化概念,有或沒有的差別,隨機性,色彩模式的調整...等
Thumbnail
這是個自己學習的紀錄,可能會有點枯燥,但忘了時能夠當作查詢資料用:)
Thumbnail
在數位設計的世界中,我們總是被色彩所包圍,而其中一個關鍵的元素就是色彩描述檔(又稱:描述檔、ICC色彩描述檔)。 它是一個將印表機、螢幕等裝置具備的色域資訊數值化的檔案唷!或許你也曾經思考過,當我們看到[R:0/G:0/B:255]或是[C:100%/M:100%/Y:0%]這樣的數值時,心中