我遇到了一个类似的问题,我必须创建一个平滑的滑块,我做了以下操作使滑块看起来非常平滑(这里的一个实现- 请参阅季度/年度滑块)
- 非常小的步长值(我使用了 0.0025 的值,而每一步所需的值是 1 个单位)
- 将功能分配给滑块和/或滑块的更改事件。此函数会将滑块的实际值(0.0025 的倍数)转换为我们想要的步长值(1,2,3 等)并用于任何计算
- 为滑块的停止事件分配一个函数,将滑块从滑块的当前值滑动到所需的值(1、2、3 等)。
例子
// Slider init
$('#my-slider').slider({
value : 6,
min : 1,
max : 6,
animate : true,
step : 0.0025,
slide : slide_fn,
change : slide_fn,
stop : stop_fn,
});
// Slide function
function slide_fn(e, ui) {
var value = get_desired_value(ui.value);
// Do your stuff
}
// Stop function
function stop_fn(e, ui) {
var value = get_desired_value(ui.value);
// slide to the desired value
setTimeout(function() {
$("#my-slider").slider("value" , value);
}, 300);
}
// get desired value - can be modified as per your requirements
// idea here is to assign anything between 0.5 to 1.5 to value 1, 1.5 to 2.5 to 2 and so on
function get_desired_value(ui_value) {
var float_value = parseInt(parseFloat(ui_value) * 1000) / 1000;
var int_value = parseInt(float_value);
if (float_value > int_value - 0.5 && float_value <= int_value + 0.5) {
return int_value;
} else if (float_value > int_value + 0.5) {
return (int_value + 1);
}
}
我没有测试过上面的代码,但你应该明白了