<input type="range" min="-100" max="0" value="0" class="range blue"/>
body, html {
background-color: #1d1c25;
margin: 0;
padding: 0;
}
.range {
-webkit-appearance: none;
-moz-appearance: none;
position: absolute;
left: 50%;
top: 50%;
width: 200px;
margin-top: 10px;
transform: translate(-50%, -50%);
}
input[type=range]::-webkit-slider-runnable-track {
-webkit-appearance: none;
background: rgba(59,173,227,1);
background: -moz-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: -webkit-gradient(left bottom, right top, color-stop(0%, rgba(59,173,227,1)), color-stop(25%, rgba(87,111,230,1)), color-stop(51%, rgba(152,68,183,1)), color-stop(100%, rgba(255,53,127,1)));
background: -webkit-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: -o-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: -ms-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3bade3 ', endColorstr='#ff357f ', GradientType=1 );
height: 2px;
}
input[type=range]:focus {
outline: none;
}
input[type=range]::-moz-range-track {
-moz-appearance: none;
background: rgba(59,173,227,1);
background: -moz-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: -webkit-gradient(left bottom, right top, color-stop(0%, rgba(59,173,227,1)), color-stop(25%, rgba(87,111,230,1)), color-stop(51%, rgba(152,68,183,1)), color-stop(100%, rgba(255,53,127,1)));
background: -webkit-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: -o-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: -ms-linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
background: linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3bade3 ', endColorstr='#ff357f ', GradientType=1 );
height: 2px;
}
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
border: 2px solid;
border-radius: 50%;
height: 25px;
width: 25px;
max-width: 80px;
position: relative;
bottom: 11px;
background-color: #1d1c25;
cursor: -webkit-grab;
-webkit-transition: border 1000ms ease;
transition: border 1000ms ease;
}
input[type=range]::-moz-range-thumb {
-moz-appearance: none;
border: 2px solid;
border-radius: 50%;
height: 25px;
width: 25px;
max-width: 80px;
position: relative;
bottom: 11px;
background-color: #1d1c25;
cursor: -moz-grab;
-moz-transition: border 1000ms ease;
transition: border 1000ms ease;
}
.range.blue::-webkit-slider-thumb {
border-color: rgb(59,173,227);
}
.range.ltpurple::-webkit-slider-thumb {
border-color: rgb(87,111,230);
}
.range.purple::-webkit-slider-thumb {
border-color: rgb(152,68,183);
}
.range.pink::-webkit-slider-thumb {
border-color: rgb(255,53,127);
}
.range.blue::-moz-range-thumb {
border-color: rgb(59,173,227);
}
.range.ltpurple::-moz-range-thumb {
border-color: rgb(87,111,230);
}
.range.purple::-moz-range-thumb {
border-color: rgb(152,68,183);
}
.range.pink::-moz-range-thumb {
border-color: rgb(255,53,127);
}
input[type=range]::-webkit-slider-thumb:active {
cursor: -webkit-grabbing;
}
input[type=range]::-moz-range-thumb:active {
cursor: -moz-grabbing;
}
var inputRange = document.getElementsByClassName('range')[0],
maxValue = 100, // the higher the smoother when dragging
speed = 5,
currValue, rafID;
// set min/max value
inputRange.min = 0;
inputRange.max = maxValue;
// listen for unlock
function unlockStartHandler() {
// clear raf if trying again
window.cancelAnimationFrame(rafID);
// set to desired value
currValue = +this.value;
}
function unlockEndHandler() {
// store current value
currValue = +this.value;
// determine if we have reached success or not
if(currValue >= maxValue) {
successHandler();
}
else {
rafID = window.requestAnimationFrame(animateHandler);
}
}
// handle range animation
function animateHandler() {
// calculate gradient transition
var transX = currValue - maxValue;
// update input range
inputRange.value = currValue;
//Change slide thumb color on mouse up
if (currValue < 20) {
inputRange.classList.remove('ltpurple');
}
if (currValue < 40) {
inputRange.classList.remove('purple');
}
if (currValue < 60) {
inputRange.classList.remove('pink');
}
// determine if we need to continue
if(currValue > -1) {
window.requestAnimationFrame(animateHandler);
}
// decrement value
currValue = currValue - speed;
}
// handle successful unlock
function successHandler() {
alert('Unlocked');
};
// bind events
inputRange.addEventListener('mousedown', unlockStartHandler, false);
inputRange.addEventListener('mousestart', unlockStartHandler, false);
inputRange.addEventListener('mouseup', unlockEndHandler, false);
inputRange.addEventListener('touchend', unlockEndHandler, false);
// move gradient
inputRange.addEventListener('input', function() {
//Change slide thumb color on way up
if (this.value > 20) {
inputRange.classList.add('ltpurple');
}
if (this.value > 40) {
inputRange.classList.add('purple');
}
if (this.value > 60) {
inputRange.classList.add('pink');
}
//Change slide thumb color on way down
if (this.value < 20) {
inputRange.classList.remove('ltpurple');
}
if (this.value < 40) {
inputRange.classList.remove('purple');
}
if (this.value < 60) {
inputRange.classList.remove('pink');
}
});
This Pen doesn't use any external CSS resources.