Simple Background Color Changer
After trying to figure out if it was possible to extract and display an image's metadata in the browser with only JavaScript, I discovered it wasn't as easy as I hoped. So I built this instead. It's nothing special, just extra practice extracted values from inputs and concatenating them into something usable. I didn't do any checks on the values entered, but it won't work properly unless hex color values are used.
View the code:
HTML and JS
<div class="code-block">
<div id="main-img">
<p>Current color: <span id="color-label">#999999</span></p>
</div>
<h4>Alter the image's background color</h4>
<p>All values must be <a href="https://en.wikipedia.org/wiki/Hexadecimal">hexadecimal</a> numbers.</p>
<ul>
<li><label for="red-color-input">Red:</label> <input id="red-color-input" type="text" maxlength="2"></li>
<li><label for="green-color-input">Green:</label> <input id="green-color-input" type="text" maxlength="2"></li>
<li><label for="blue-color-input">Blue:</label> <input id="blue-color-input" type="text" maxlength="2"></li>
<li><label for="opacity-input">Opacity:</label> <input id="opacity-input" type="text" maxlength="2"></li>
</ul>
<button id="update-color-button">Update Color</button>
</div>
<script>
/* Variables */
const redColor = document.getElementById('red-color-input');
const blueColor = document.getElementById('blue-color-input');
const greenColor = document.getElementById('green-color-input');
const opacityColor = document.getElementById('opacity-input');
const targetIMG = document.getElementById('main-img');
const updateButton = document.getElementById('update-color-button');
let colorLabel = document.getElementById('color-label');
/* Function */
function updateColor() {
let colorValue = `#${redColor.value}${blueColor.value}${greenColor.value}${opacityColor.value}`;
colorLabel.innerText = colorValue;
targetIMG.style.backgroundColor = colorValue;
}
/* Events */
updateButton.addEventListener('click', updateColor);
</script>
CSS
.code-block {
display: block;
padding: 1rem;
margin: 3rem auto;
text-align: center;
background-color: rgb(90, 90, 90);
border-radius: 1rem;
font-family: Helvetica, Arial, sans-serif;
color: white;
width: clamp(16em, 90vw, 60em);
}
.code-block button {
display: block;
margin: 1rem auto;
height: 44px;
border-radius: .5rem;
border: solid 1px #eee;
background: white;
padding: 0 1rem;
text-transform: uppercase;
}
.code-block ul {
padding: 0;
list-style: none;
text-align: left;
}
.code-block ul li {
padding: .5em 0;
}
.code-block ul li input{
width: 5ch;
}
#main-img {
background-image: url('https://www.jeremycaudle.com/floorshotJC.jpeg');
background-clip: border-box;
background-size: contain;
height: 300px;
width: 300px;
background-blend-mode: lighten;
background-color: #999999;
display: block;
margin: 0 auto;
}
@supports (display: flex) {
#main-img {
display: flex;
flex-direction: column;
justify-content: center;
align-content: center;
}
.code-block ul {
display: flex;
flex-direction: row;
justify-content: space-evenly;
}
.code-block ul li {
display: flex;
flex-grow: 1;
flex-direction: column;
justify-items: center;
align-items: center;
text-align: center;
}
.code-block ul li label {
margin-bottom: .5em;
}
}