HTML5 input range slider
A Pen by Cassio Melo on CodePen.
HTML5 input range slider
A Pen by Cassio Melo on CodePen.
<h1> | |
HTML5 Boost Slider | |
<span> | |
move the handler to change its value | |
</span> | |
</h1> | |
<div class="slider boost"> | |
<input type="range" min="0" max="50" step="1" value="35" /> | |
</div> |
function getGrandientColor(rangeValue){ | |
var startColor = [53, 242, 44]; // R,G,B | |
var endColor = [255, 54, 54]; | |
var diffRed = endColor[0] - startColor[0]; | |
var diffGreen = endColor[1] - startColor[1]; | |
var diffBlue = endColor[2] - startColor[2]; | |
diffRed = (diffRed * rangeValue) + startColor[0]; | |
diffGreen = (diffGreen * rangeValue) + startColor[1]; | |
diffBlue = (diffBlue * rangeValue) + startColor[2]; | |
return [ | |
Math.round(diffRed), | |
Math.round(diffGreen), | |
Math.round(diffBlue) | |
]; | |
} | |
$(function() { | |
$('.slider > input').on('change', | |
function(){ | |
var min = $( this ).attr("min"); | |
var max = $( this ).attr("max"); | |
var current = $( this ).val(); | |
var rangeValue = (current-min)/(max-min) | |
var rgbArray = getGrandientColor(rangeValue); | |
//$( this ).parent().css() | |
$('<style name="changeable-style">.boost input[type="range"]::'+ | |
'-webkit-slider-thumb:after { '+ | |
'background: rgb(' + rgbArray.join(',') + ');'+ | |
'}</style>').appendTo('head'); | |
//alert(''); | |
}); | |
}); // end dom ready |
@import "compass"; | |
@import url('http://fonts.googleapis.com/css?family=Lato'); | |
* { | |
margin: 0; | |
padding: 0; | |
box-sizing: border-box; | |
} | |
html, body { | |
height: 100%; | |
} | |
body { | |
position: relative; | |
background: #eee; | |
} | |
h1 { | |
margin: 0; | |
padding: 20px 20px 30px; | |
font: 400 30px Lato, sans-serif; | |
color: #fff; | |
background: #555; | |
} | |
h1 span { | |
display: block; | |
margin: 10px 0 0; | |
font-size: 20px; | |
} | |
.slider { | |
position: absolute; | |
top: 180px; | |
width: 200px; | |
height: 24px; | |
padding: 2px 2px 10px 2px; | |
border-radius: 20px 20px 20px 20px; | |
background: #888; | |
/*transform: rotate(-90deg);*/ | |
} | |
.boost { | |
left: 50px; | |
} | |
input[type="range"] { | |
width: 100%; | |
height: 20px; | |
border-radius: 20px 20px 20px 20px; | |
background: #fff; | |
overflow: hidden; | |
cursor: pointer; | |
-webkit-appearance: none; | |
} | |
input[type="range"]::-webkit-slider-thumb { | |
-webkit-appearance: none; | |
position: relative; | |
z-index: 3; | |
width: 5px; | |
height: 20px; | |
} | |
.boost input[type="range"]::-webkit-slider-thumb { | |
background: #b00; | |
} | |
input[type="range"]::-webkit-slider-thumb:after { | |
content: ''; | |
width: 500px; | |
height: 100%; | |
position: absolute; | |
top: 0; | |
right: 5px; | |
z-index: 1; | |
} | |
.boost input[type="range"]::-webkit-slider-thumb:after { | |
background: #f55; | |
} | |
/*.boost:after { | |
background: #f55; | |
}*/ |