This code creates a thermometer slider widget using JavaScript. It lets you adjust temperature ranges visually. The slider modifies temperature values between -20°C to 50°C or Fahrenheit. You can change the temperature units between Celsius and Fahrenheit. Adjust the slider or click on the temperature values to modify them easily.
This code for a thermometer slider widget is handy for websites needing temperature adjustment tools. It’s useful for weather apps, climate-related sites, or any platform requiring temperature settings. One major benefit is its intuitive visual interface for easy temperature control.
How to Create a Thermometer Slider Widget Using JavaScript
1. Start by creating the HTML structure. Copy the following code within the <div id="wrapper"> tags. This includes the thermometer container, temperature slider, input fields, and information paragraph.
<div id="wrapper"> <div id="termometer"> <div id="temperature" style="height:0" data-value="0°C"></div> <div id="graduations"></div> </div> <div id="playground"> <div id="range"> <input id="minTemp" type="text" value="-20"> <input type="range" min="-20" max="50" value="42"> <input id="maxTemp" type="text" value="50"> </div> <p id="unit">Celcius C°</p> </div> <p id="info">Click on the values to change them!</p> </div>
2. Copy the following CSS code to style the thermometer and its components. This code ensures a visually appealing and responsive design. You can customize colors and dimensions to match your website’s theme.
@import url("https://fonts.googleapis.com/css?family=Jaldi&display=swap");
body {
display: flex;
height: 100vh;
margin: 0;
font-family: "Jaldi", sans-serif;
font-size: 14px;
}
#wrapper {
margin: auto;
display: flex;
flex-direction: column;
align-items: center;
}
p {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#info {
opacity: 0.2;
margin: 0;
text-align: center;
}
#termometer {
width: 25px;
background: #38383f;
height: 240px;
position: relative;
border: 9px solid #2a2a2e;
border-radius: 20px;
z-index: 1;
margin-bottom: 50px;
}
#termometer:before, #termometer:after {
position: absolute;
content: "";
border-radius: 50%;
}
#termometer:before {
width: 100%;
height: 34px;
bottom: 9px;
background: #38383f;
z-index: -1;
}
#termometer:after {
transform: translateX(-50%);
width: 50px;
height: 50px;
background-color: #3dcadf;
bottom: -41px;
border: 9px solid #2a2a2e;
z-index: -3;
left: 50%;
}
#termometer #graduations {
height: 59%;
top: 20%;
width: 50%;
}
#termometer #graduations, #termometer #graduations:before {
position: absolute;
border-top: 2px solid rgba(0, 0, 0, 0.5);
border-bottom: 2px solid rgba(0, 0, 0, 0.5);
}
#termometer #graduations:before {
content: "";
height: 34%;
width: 100%;
top: 32%;
}
#termometer #temperature {
bottom: 0;
background: linear-gradient(#f17a65, #3dcadf) no-repeat bottom;
width: 100%;
border-radius: 20px;
background-size: 100% 240px;
transition: all 0.2s ease-in-out;
}
#termometer #temperature, #termometer #temperature:before, #termometer #temperature:after {
position: absolute;
}
#termometer #temperature:before {
content: attr(data-value);
background: rgba(0, 0, 0, 0.7);
color: white;
z-index: 2;
padding: 5px 10px;
border-radius: 5px;
font-size: 1em;
line-height: 1;
transform: translateY(50%);
left: calc(100% + 1em / 1.5);
top: calc(-1em + 5px - 5px * 2);
}
#termometer #temperature:after {
content: "";
border-top: 0.4545454545em solid transparent;
border-bottom: 0.4545454545em solid transparent;
border-right: 0.6666666667em solid rgba(0, 0, 0, 0.7);
left: 100%;
top: calc(-1em / 2.2 + 5px);
}
#playground {
font-size: 1.1em;
}
#playground #range {
display: flex;
}
#playground #range input[type=text] {
width: 2em;
background: transparent;
border: none;
color: inherit;
font: inherit;
margin: 0 5px;
padding: 0px 5px;
border-bottom: 2px solid transparent;
transition: all 0.2s ease-in-out;
}
#playground #range input[type=text]:focus {
border-color: #3dcadf;
outline: none;
}
#playground #range input[type=text]:first-child {
text-align: right;
}
#playground #unit {
width: 100%;
margin: 0;
text-align: center;
}
#playground #unit:hover {
cursor: pointer;
}
input[type=range] {
-webkit-appearance: none;
background: transparent;
margin: 5.5px 0;
width: 100%;
}
input[type=range]::-moz-focus-outer {
border: 0;
}
input[type=range]:hover {
cursor: pointer;
}
input[type=range]:focus {
outline: 0;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #313137;
border-color: #313137;
}
input[type=range]:focus::-ms-fill-lower {
background: #2a2a2e;
}
input[type=range]:focus::-ms-fill-upper {
background: #313137;
border-color: #313137;
}
input[type=range]::-webkit-slider-runnable-track {
cursor: default;
height: 10px;
transition: all 0.2s ease;
width: 100%;
cursor: pointer;
transition: all 0.2s ease-in-out;
box-shadow: 1px 1px 1px transparent, 0 0 1px rgba(13, 13, 13, 0);
background: #2a2a2e;
border: 2px solid #2a2a2e;
border-radius: 5px;
}
input[type=range]::-webkit-slider-thumb {
box-shadow: 4px 4px 4px transparent, 0 0 4px rgba(13, 13, 13, 0);
background: #3dcadf;
border: 0px solid #3d3d44;
border-radius: 12px;
cursor: pointer;
height: 11px;
width: 18px;
-webkit-appearance: none;
margin-top: -2.5px;
}
input[type=range]::-moz-range-track {
box-shadow: 1px 1px 1px transparent, 0 0 1px rgba(13, 13, 13, 0);
cursor: default;
height: 10px;
transition: all 0.2s ease;
width: 100%;
cursor: pointer;
transition: all 0.2s ease-in-out;
background: #2a2a2e;
border: 2px solid #2a2a2e;
border-radius: 5px;
height: 5px;
}
input[type=range]::-moz-range-thumb {
box-shadow: 4px 4px 4px transparent, 0 0 4px rgba(13, 13, 13, 0);
background: #3dcadf;
border: 0px solid #3d3d44;
border-radius: 12px;
cursor: pointer;
height: 7px;
width: 14px;
}
input[type=range]::-ms-track {
cursor: default;
height: 10px;
transition: all 0.2s ease;
width: 100%;
cursor: pointer;
transition: all 0.2s ease-in-out;
background: transparent;
border-color: transparent;
border-width: 5.5px 0;
color: transparent;
}
input[type=range]::-ms-fill-lower {
box-shadow: 1px 1px 1px transparent, 0 0 1px rgba(13, 13, 13, 0);
background: #222226;
border: 2px solid #2a2a2e;
border-radius: 10px;
}
input[type=range]::-ms-fill-upper {
box-shadow: 1px 1px 1px transparent, 0 0 1px rgba(13, 13, 13, 0);
background: #2a2a2e;
border: 2px solid #2a2a2e;
border-radius: 10px;
}
input[type=range]::-ms-thumb {
box-shadow: 4px 4px 4px transparent, 0 0 4px rgba(13, 13, 13, 0);
background: #3dcadf;
border: 0px solid #3d3d44;
border-radius: 12px;
cursor: pointer;
height: 7px;
width: 14px;
margin-top: 2.5px;
}
input[type=range]:disabled::-webkit-slider-thumb {
cursor: not-allowed;
}
input[type=range]:disabled::-moz-range-thumb {
cursor: not-allowed;
}
input[type=range]:disabled::-ms-thumb {
cursor: not-allowed;
}
input[type=range]:disabled::-webkit-slider-runnable-track {
cursor: not-allowed;
}
input[type=range]:disabled::-ms-fill-lower {
cursor: not-allowed;
}
input[type=range]:disabled::-ms-fill-upper {
cursor: not-allowed;
}
3. Finally, copy the JavaScript code. This code enables dynamic temperature adjustments and unit switching. It calculates the temperature’s visual representation based on the slider’s position.
const units = {
Celcius: "°C",
Fahrenheit: "°F" };
const config = {
minTemp: -20,
maxTemp: 50,
unit: "Celcius" };
// Change min and max temperature values
const tempValueInputs = document.querySelectorAll("input[type='text']");
tempValueInputs.forEach(input => {
input.addEventListener("change", event => {
const newValue = event.target.value;
if (isNaN(newValue)) {
return input.value = config[input.id];
} else {
config[input.id] = input.value;
range[input.id.slice(0, 3)] = config[input.id]; // Update range
return setTemperature(); // Update temperature
}
});
});
// Switch unit of temperature
const unitP = document.getElementById("unit");
unitP.addEventListener("click", () => {
config.unit = config.unit === "Celcius" ? "Fahrenheit" : "Celcius";
unitP.innerHTML = config.unit + ' ' + units[config.unit];
return setTemperature();
});
// Change temperature
const range = document.querySelector("input[type='range']");
const temperature = document.getElementById("temperature");
function setTemperature() {
temperature.style.height = (range.value - config.minTemp) / (config.maxTemp - config.minTemp) * 100 + "%";
temperature.dataset.value = range.value + units[config.unit];
}
range.addEventListener("input", setTemperature);
setTimeout(setTemperature, 1000);
That’s all! hopefully, you have successfully created the Thermometer Slider Widget Using JavaScript. If you have any questions or suggestions, feel free to comment below.
Similar Code Snippets:

I code and create web elements for amazing people around the world. I like work with new people. New people new Experiences.
I truly enjoy what I’m doing, which makes me more passionate about web development and coding. I am always ready to do challenging tasks whether it is about creating a custom CMS from scratch or customizing an existing system.






