script.aculo.us ライブラリの slider.js による画像スライダーを使った評価フォーム。input 要素の type 属性に hidden を指定した、非表示データ用フィールドの値に、スライダーの値を、JavaScript で動的に入力することで、スライダーの値を送信できるようになる。
script.aculo.us のスライダーのトラックとハンドルを画像で表示のページで、紹介した画像スライダーを、フォーム用にカスタマイズしたもの。
実装例
サンプルなので、実際には送信しません。
実装例の動作について
スライダーの動作については、script.aculo.us のスライダーのトラックとハンドルを画像で表示のページで、紹介した画像スライダーと同様の動作である。
「以上の通り評価する」ボタンをクリックすると、「デザイン性:3、実用性:3、好感度:3の評価でよろしいですか?」という確認ダイアログが現れる。数字は、スライダーで指定した値になる。確認ダイアログで、「OK」をクリックすると送信され、「キャンセル」をクリックすると送信しない。
ソースコード
JavaScript
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="scriptaculous/slider.js"></script>
<script type="text/javascript">
<!--
window . onload = function () {
new Control . Slider( 'slider-handle-1', 'slider-track-1', {
range: $R( 1, 5),
values: [ 1, 2, 3, 4, 5 ],
sliderValue: '3',
onSlide: function( value ) {
$( 'slider-value-1' ) . innerHTML = value;
$( 'input-slider-1' ) . value = value;
},
onChange: function( value ) {
$( 'slider-value-1' ) . innerHTML = value;
$( 'input-slider-1' ) . value = value;
}
} );
new Control . Slider( 'slider-handle-2', 'slider-track-2', {
range: $R( 1, 5),
values: [ 1, 2, 3, 4, 5 ],
sliderValue: '3',
onSlide: function( value ) {
$( 'slider-value-2' ) . innerHTML = value;
$( 'input-slider-2' ) . value = value;
},
onChange: function( value ) {
$( 'slider-value-2' ) . innerHTML = value;
$( 'input-slider-2' ) . value = value;
}
} );
new Control . Slider( 'slider-handle-3', 'slider-track-3', {
range: $R( 1, 5),
values: [ 1, 2, 3, 4, 5 ],
sliderValue: '3',
onSlide: function( value ) {
$( 'slider-value-3' ) . innerHTML = value;
$( 'input-slider-3' ) . value = value;
},
onChange: function( value ) {
$( 'slider-value-3' ) . innerHTML = value;
$( 'input-slider-3' ) . value = value;
}
} );
}
// -->
</script>
<script type="text/javascript" src="scriptaculous/slider.js"></script>
<script type="text/javascript">
<!--
window . onload = function () {
new Control . Slider( 'slider-handle-1', 'slider-track-1', {
range: $R( 1, 5),
values: [ 1, 2, 3, 4, 5 ],
sliderValue: '3',
onSlide: function( value ) {
$( 'slider-value-1' ) . innerHTML = value;
$( 'input-slider-1' ) . value = value;
},
onChange: function( value ) {
$( 'slider-value-1' ) . innerHTML = value;
$( 'input-slider-1' ) . value = value;
}
} );
new Control . Slider( 'slider-handle-2', 'slider-track-2', {
range: $R( 1, 5),
values: [ 1, 2, 3, 4, 5 ],
sliderValue: '3',
onSlide: function( value ) {
$( 'slider-value-2' ) . innerHTML = value;
$( 'input-slider-2' ) . value = value;
},
onChange: function( value ) {
$( 'slider-value-2' ) . innerHTML = value;
$( 'input-slider-2' ) . value = value;
}
} );
new Control . Slider( 'slider-handle-3', 'slider-track-3', {
range: $R( 1, 5),
values: [ 1, 2, 3, 4, 5 ],
sliderValue: '3',
onSlide: function( value ) {
$( 'slider-value-3' ) . innerHTML = value;
$( 'input-slider-3' ) . value = value;
},
onChange: function( value ) {
$( 'slider-value-3' ) . innerHTML = value;
$( 'input-slider-3' ) . value = value;
}
} );
}
// -->
</script>
CSS
<style type="text/css">
<!--
#slider-track-1, #slider-track-2, #slider-track-3 {
float: left;
background: url( slider-track.png ) no-repeat center center;
width: 100px;
height: 25px;
border-top: 1px gray solid;
border-bottom: 1px gray solid;
}
#slider-track-1:hover, #slider-track-2:hover, #slider-track-3:hover {
background: url( slider-track-over.png ) no-repeat center center;
}
#slider-handle-1, #slider-handle-2, #slider-handle-3 {
background: url( slider-handle-ball-20x20.png ) no-repeat center center;
width: 20px;
height: 25px;
cursor: pointer;
}
#slider-handle-1:hover, #slider-handle-2:hover, #slider-handle-3:hover {
background-image: url( slider-handle-ball-20x20-over.png );
}
#slider-value-1, #slider-value-2, #slider-value-3 {
float: left;
background-color: gray;
color: white;
height: 25px;
width: 30px;
font-size: 12px;
text-align: center;
border-radius: 5px;
border: 1px gray solid;
margin-right: 5px;
}
.slider-bad, .slider-good {
float: left;
background-color: white;
color: dimgray;
height: 25px;
width: 50px;
font-size: 12px;
text-align: center;
border: 1px gray solid;
margin: 0;
}
.slider-title {
float: left;
height: 27px;
width: 100px;
font-size: 17px;
text-align: right;
padding-right: 10px;
}
.slider-bad {
border-right: none;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
}
.slider-good {
border-left: none;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
}
.slider-wrap {
margin: 5px 0;
}
#evaluation-form {
padding-left: 100px;
}
-->
</style>
<!--
#slider-track-1, #slider-track-2, #slider-track-3 {
float: left;
background: url( slider-track.png ) no-repeat center center;
width: 100px;
height: 25px;
border-top: 1px gray solid;
border-bottom: 1px gray solid;
}
#slider-track-1:hover, #slider-track-2:hover, #slider-track-3:hover {
background: url( slider-track-over.png ) no-repeat center center;
}
#slider-handle-1, #slider-handle-2, #slider-handle-3 {
background: url( slider-handle-ball-20x20.png ) no-repeat center center;
width: 20px;
height: 25px;
cursor: pointer;
}
#slider-handle-1:hover, #slider-handle-2:hover, #slider-handle-3:hover {
background-image: url( slider-handle-ball-20x20-over.png );
}
#slider-value-1, #slider-value-2, #slider-value-3 {
float: left;
background-color: gray;
color: white;
height: 25px;
width: 30px;
font-size: 12px;
text-align: center;
border-radius: 5px;
border: 1px gray solid;
margin-right: 5px;
}
.slider-bad, .slider-good {
float: left;
background-color: white;
color: dimgray;
height: 25px;
width: 50px;
font-size: 12px;
text-align: center;
border: 1px gray solid;
margin: 0;
}
.slider-title {
float: left;
height: 27px;
width: 100px;
font-size: 17px;
text-align: right;
padding-right: 10px;
}
.slider-bad {
border-right: none;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
}
.slider-good {
border-left: none;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
}
.slider-wrap {
margin: 5px 0;
}
#evaluation-form {
padding-left: 100px;
}
-->
</style>
HTML
<div class="slider-wrap">
<div class="slider-title">デザイン性</div>
<div id="slider-value-1">3</div>
<div class="slider-bad">低い</div>
<div id="slider-track-1">
<div id="slider-handle-1"></div>
</div>
<div class="slider-good">高い</div>
<div style="clear: both;"></div>
</div>
<div class="slider-wrap">
<div class="slider-title">実用性</div>
<div id="slider-value-2">3</div>
<div class="slider-bad">低い</div>
<div id="slider-track-2">
<div id="slider-handle-2"></div>
</div>
<div class="slider-good">高い</div>
<div style="clear: both;"></div>
</div>
<div class="slider-wrap">
<div class="slider-title">好感度</div>
<div id="slider-value-3">3</div>
<div class="slider-bad">低い</div>
<div id="slider-track-3">
<div id="slider-handle-3"></div>
</div>
<div class="slider-good">高い</div>
<div style="clear: both;"></div>
</div>
<form name="evaluationForm" method="post" action="#" id="evaluation-form" onsubmit="return confirm( 'デザイン性:' + $( 'input-slider-1' ) . value + '、実用性:' + $( 'input-slider-2' ) . value + '、好感度:' + $( 'input-slider-3' ) . value + 'の評価でよろしいですか?' )">
<input type="hidden" id="input-slider-1" name="input-slider-1" value="3" />
<input type="hidden" id="input-slider-2" name="input-slider-2" value="3" />
<input type="hidden" id="input-slider-3" name="input-slider-3" value="3" />
<input type="submit" value="以上の通り評価する" />
</form>
<div class="slider-title">デザイン性</div>
<div id="slider-value-1">3</div>
<div class="slider-bad">低い</div>
<div id="slider-track-1">
<div id="slider-handle-1"></div>
</div>
<div class="slider-good">高い</div>
<div style="clear: both;"></div>
</div>
<div class="slider-wrap">
<div class="slider-title">実用性</div>
<div id="slider-value-2">3</div>
<div class="slider-bad">低い</div>
<div id="slider-track-2">
<div id="slider-handle-2"></div>
</div>
<div class="slider-good">高い</div>
<div style="clear: both;"></div>
</div>
<div class="slider-wrap">
<div class="slider-title">好感度</div>
<div id="slider-value-3">3</div>
<div class="slider-bad">低い</div>
<div id="slider-track-3">
<div id="slider-handle-3"></div>
</div>
<div class="slider-good">高い</div>
<div style="clear: both;"></div>
</div>
<form name="evaluationForm" method="post" action="#" id="evaluation-form" onsubmit="return confirm( 'デザイン性:' + $( 'input-slider-1' ) . value + '、実用性:' + $( 'input-slider-2' ) . value + '、好感度:' + $( 'input-slider-3' ) . value + 'の評価でよろしいですか?' )">
<input type="hidden" id="input-slider-1" name="input-slider-1" value="3" />
<input type="hidden" id="input-slider-2" name="input-slider-2" value="3" />
<input type="hidden" id="input-slider-3" name="input-slider-3" value="3" />
<input type="submit" value="以上の通り評価する" />
</form>
要点解説
JavaScript
<script type="text/javascript" src="prototype.js"></script>
prototype.js を読み込む。
<script type="text/javascript" src="scriptaculous/slider.js"></script>
script.aculo.us ライブラリの slider.js を読み込む。
<script type="text/javascript">
<!--
window . onload = function () {
new Control . Slider( 'slider-handle-1', 'slider-track-1', {
range: $R( 1, 5), // 範囲を 1~5 に設定
values: [ 1, 2, 3, 4, 5 ],
// ハンドル移動時の値を 1, 2, 3, 4, 5 に設定
sliderValue: '3', // 初期値を 3 に設定
onSlide: function( value ) { // スライダーのハンドルをスライドさせているときの値を、
$( 'slider-value-1' ) . innerHTML = value; // id が slider-value-1 の要素に表示
$( 'input-slider-1' ) . value = value; // id が input-slider-1 の要素の値に代入
},
onChange: function( value ) { // スライダーのハンドルの移動後の位置の値を、
$( 'slider-value-1' ) . innerHTML = value; // id が slider-value-1 の要素に表示
$( 'input-slider-1' ) . value = value; // id が input-slider-1 の要素の値に代入
}
} );
new Control . Slider( 'slider-handle-2', 'slider-track-2', {
range: $R( 1, 5), // 範囲を 1~5 に設定
values: [ 1, 2, 3, 4, 5 ],
// ハンドル移動時の値を 1, 2, 3, 4, 5 に設定
sliderValue: '3', // 初期値を 3 に設定
onSlide: function( value ) { // スライダーのハンドルをスライドさせているときの値を、
$( 'slider-value-2' ) . innerHTML = value; // id が slider-value-2 の要素に表示
$( 'input-slider-2' ) . value = value; // id が input-slider-2 の要素の値に代入
},
onChange: function( value ) { // スライダーのハンドルの移動後の位置の値を、
$( 'slider-value-2' ) . innerHTML = value; // id が slider-value-2 の要素に表示
$( 'input-slider-2' ) . value = value; // id が input-slider-2 の要素の値に代入
}
} );
new Control . Slider( 'slider-handle-3', 'slider-track-3', {
range: $R( 1, 5), // 範囲を 1~5 に設定
values: [ 1, 2, 3, 4, 5 ],
// ハンドル移動時の値を 1, 2, 3, 4, 5 に設定
sliderValue: '3', // 初期値を 3 に設定
onSlide: function( value ) { // スライダーのハンドルをスライドさせているときの値を、
$( 'slider-value-3' ) . innerHTML = value; // id が slider-value-3 の要素に表示
$( 'input-slider-3' ) . value = value; // id が input-slider-3 の要素の値に代入
},
onChange: function( value ) { // スライダーのハンドルの移動後の位置の値を、
$( 'slider-value-3' ) . innerHTML = value; // id が slider-value-3 の要素に表示
$( 'input-slider-3' ) . value = value; // id が input-slider-3 の要素の値に代入
}
} );
}
// -->
</script>
<!--
window . onload = function () {
new Control . Slider( 'slider-handle-1', 'slider-track-1', {
range: $R( 1, 5), // 範囲を 1~5 に設定
values: [ 1, 2, 3, 4, 5 ],
// ハンドル移動時の値を 1, 2, 3, 4, 5 に設定
sliderValue: '3', // 初期値を 3 に設定
onSlide: function( value ) { // スライダーのハンドルをスライドさせているときの値を、
$( 'slider-value-1' ) . innerHTML = value; // id が slider-value-1 の要素に表示
$( 'input-slider-1' ) . value = value; // id が input-slider-1 の要素の値に代入
},
onChange: function( value ) { // スライダーのハンドルの移動後の位置の値を、
$( 'slider-value-1' ) . innerHTML = value; // id が slider-value-1 の要素に表示
$( 'input-slider-1' ) . value = value; // id が input-slider-1 の要素の値に代入
}
} );
new Control . Slider( 'slider-handle-2', 'slider-track-2', {
range: $R( 1, 5), // 範囲を 1~5 に設定
values: [ 1, 2, 3, 4, 5 ],
// ハンドル移動時の値を 1, 2, 3, 4, 5 に設定
sliderValue: '3', // 初期値を 3 に設定
onSlide: function( value ) { // スライダーのハンドルをスライドさせているときの値を、
$( 'slider-value-2' ) . innerHTML = value; // id が slider-value-2 の要素に表示
$( 'input-slider-2' ) . value = value; // id が input-slider-2 の要素の値に代入
},
onChange: function( value ) { // スライダーのハンドルの移動後の位置の値を、
$( 'slider-value-2' ) . innerHTML = value; // id が slider-value-2 の要素に表示
$( 'input-slider-2' ) . value = value; // id が input-slider-2 の要素の値に代入
}
} );
new Control . Slider( 'slider-handle-3', 'slider-track-3', {
range: $R( 1, 5), // 範囲を 1~5 に設定
values: [ 1, 2, 3, 4, 5 ],
// ハンドル移動時の値を 1, 2, 3, 4, 5 に設定
sliderValue: '3', // 初期値を 3 に設定
onSlide: function( value ) { // スライダーのハンドルをスライドさせているときの値を、
$( 'slider-value-3' ) . innerHTML = value; // id が slider-value-3 の要素に表示
$( 'input-slider-3' ) . value = value; // id が input-slider-3 の要素の値に代入
},
onChange: function( value ) { // スライダーのハンドルの移動後の位置の値を、
$( 'slider-value-3' ) . innerHTML = value; // id が slider-value-3 の要素に表示
$( 'input-slider-3' ) . value = value; // id が input-slider-3 の要素の値に代入
}
} );
}
// -->
</script>