我使用了 jquery ui ( http://jqueryui.com/slider/#steps ) 并对代码进行了一些更改以满足我的需要。
我正在尝试制作这样的东西,
现在我正在使用这些功能,稍后会使用用户界面。
我正在尝试使滑块捕捉到所有值,而不是跳到单击鼠标的位置。例如滑块上的手柄在最左端,当我单击右端的滑块时,它会跳转到单击鼠标的位置,我不希望这种情况发生。我希望滑块跟随数组上的值,从数组 [0] 到数组 [19] 或从数组 [19] 到数组 [0]。
var valMap = [10,9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,10]; //10x optical zoom WIDE/TELE
当句柄位于左端数组 [0] 等于 10 并且当我单击数组 [19] 右端时,它不应跳转到数组 [19] 它应该从数组1开始,即 9 然后再次单击数组[2] 即 8 等。
它应该有序而不是跳跃。
10,9,8,7,6,5,4,3,2,1 <--- LEFT END 缩小(宽)
1,2,3,4,5,6,7,8,9,10 <--- RIGHT END 放大(TELE)
即使我单击滑块的任何部分,它也应该按照顺序而不是跳转到单击鼠标的位置。
用于放大的滑块示例
& = 滑块手柄
^ = 鼠标点击
W & - - - - - - - - - - - - - - ^ - - - - T
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10
W - & - - - - - ^ - - - - - - - - - - - - T
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10
查看手柄如何从 10 移动到 9,而不是跳转到单击鼠标的 6。
再次点击:
W - - & - - - - - - - - - - - - - - - - - T
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10
用于缩小的滑块示例
W - - - - ^ - - - - - - - - - - - - - - & T
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10
W - - - - - - - - - - - ^ - - - - - - & - T
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10
再次点击:
W - - - - - - - - - - - - - - - - - & - - T
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10
这是我的代码:
<html lang="en">
<head>
<meta charset="utf-8" />
<title>jQuery UI Slider - Snap to increments</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css" />
<script>
$(document).ready(function() {
var valMap = [10,9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,10]; //10x optical zoom WIDE/TELE
var slider = $( "#slider" ).slider({
disabled: false,
animate: true,
min: 0,
max: valMap.length-1,
values: [10],
change: function( event, ui ) {
$( "#zomlevel" ).val(valMap[ui.values[0]] + "x");
slider.slider("option", "disabled", true);
slider.slider("option", "animate", "slow");
setTimeout(ENABLE, 3000);
},
stop: function(event, ui){
if(ui.value == 10){
alert("Default ZOOM");
}
if(ui.value < 10){
WIDE();
}
if(ui.value > 10){
TELE();
}
}
});
$( "#zomlevel" ).val( "x" + $( "#slider" ).slider( "value" ) );
function WIDE(){
$.post(
'cntr_L.php',
{ cmd: "OUT" },
function( data ){
$( 'body ').append( data );
});
}
function TELE(){
$.post(
'cntr_L.php',
{ cmd: "IN" },
function( data ){
$( 'body ').append( data );
});
}
function ENABLE(){
slider.slider("option", "disabled", false);
}
});
</script>
</head>
<body>
<p>
<label for="zoom">ZOOM CONTROLLER(W/T)</label>
<input type="text" id="zomlevel" style="border: 0; color: #f6931f; font-weight: bold;" />
</p>
<div id="slider"></div>
</body>
</html>
我怎样才能让它像那样工作?
这是一个jsfiddle:http: //jsfiddle.net/endl3ss/sqsCV/