【HTML】
【CSS】
/*スライダー本体*/
.js-slider{
position:relative;
width:300px;
top:15px;
height:7px;
background:#E8DBC7;
border:1px inset #E8DBC7;
border-radius: 10px;
}
/*スライダーのバー*/
.js-slider div{
position:absolute;
height:7px;
font-size:0px;
background:#D24034;
border-radius: 10px;
}
/*スライダーのつまみ*/
.js-slider input{
position:absolute;
top:-4px;
width:20px;
height:20px;
display:block;
border:1px #cccccc;
box-shadow: 2px 2px #cccccc;
border-radius: 20px;
background:#ffffff;
font-size:15px;
color: #A6937C;
text-align:center;
}
.js-slider input:hover{
color: #D24034;
}
【JavaScript】
window.onload = function(){
var output = document.getElementById('slider1o');//Valueを表示するテキストエリア
var slider = document.getElementById('slider1');//スライダー本体
var bar1 = document.getElementById('bar1');//スライダーバー
var input = document.getElementById('slider_btn');//スライダーのつまみ
var dragging = false;
var value = output.value;// 初期位置
var width = input.clientWidth / 2; //ツマミの中心点までの距離
var max_val = 10;//最大値
var min_val = 0;//最小値
var step = 1; //区切り間隔
if( ((max_val-min_val) % step) > 0) {
alert("区切り間隔の値が不正です。");
return;
}
//1目盛毎のwidth。小数点以下1桁まで。
var step_width = Math.round( (slider.clientWidth / ((max_val-min_val) / step)) * 10) / 10 ;
var set_value = function (){
// つまみのサイズ(input.clientWidth)だけ位置を調整
input.style.left = (value - input.clientWidth/2) + 'px';
//指定範囲内から選択された値
if(value < 0) value = max_val;
else if (value > slider.clientWidth) value = min_val;
value = Math.round(value / step_width) * step + min_val;
//テキストエリアにセット
output.value = value;
};
set_value();
// バー部分をクリックしたとき
slider.onclick = function(evt){
dragging = true;
document.onmousemove(evt);
document.onmouseup();
};
// ドラッグ開始
input.onmousedown = function(evt){
dragging = true;
return false;
};
// ドラッグ終了
document.onmouseup = function(evt){
if (dragging) {
dragging = false;
output.value = value;
//つまみの色を戻す
input.style.color = "#A6937C";
}
};
document.onmousemove = function(evt){
if(dragging){
// ドラッグ途中
if(!evt){
evt = window.event;
}
//マウスのx座標の位置
var left = evt.clientX;
//スライダーの位置
var rect = slider.getBoundingClientRect();
// マウス座標とスライダーの位置関係で値を決める
value = Math.round(left - rect.left - width);
//つまみの位置を目盛にあわせる
value = Math.round(value / slider.clientWidth * 10 ) * step_width;
// スライダーからはみ出したときの修正
if (value < 0) {
value = 0;
} else if (value > slider.clientWidth) {
value = slider.clientWidth;
}
//スライダーバー
bar1.style.left = "0px";
bar1.style.width = value + "px";
bar1.style.top = "0px";
//つまみの色
input.style.color = "#D24034";
set_value();
return false;
}
};
};
ちなみに、jQuery を使うスライダー
jQuery UI
KineticJS(JavaScriptライブラリ)を使ってアニメーションを作成する
※ドキュメントの参照、ダウンロードは→KineticJS
マウスドラッグで、各サークルの移動可能。FireFox, Chrome, Opera, Android(2.3+), Safari, iOS5にて動作確認済。
【参照サイト】
・HTML5 Canvas Tutorials
・Asial Blog