Есть две проблемы. Первое, как сказал Престол, событие ползунка срабатывает в начале движения, а не в конце, поэтому смещение неверно. Вы можете исправить это, установив таймаут:
$(function(){
slide: function(event, ui){
setTimeout(update_slider, 10);
},
...
});
function update_slider()
{
var offset = $('.ui-slider-handle').offset();
var value = $('#slider').slider('option', 'value');
$('#current_value').text('Value is '+value).animate({top:offset.top }, 1000 )
$('#current_value').fadeIn();
}
Вторая проблема заключается в том, что движение происходит мгновенно, а анимация - нет, а это означает, что метка будет отставать от слайдера. Лучшее, что я придумал, это:
var slide_int = null;
$(function(){
...
start: function(event, ui){
$('#current_value').empty();
// update the slider every 10ms
slide_int = setInterval(update_slider, 10);
},
stop: function(event, ui){
// remove the interval
clearInterval(slide_int);
slide_int = null;
},
...
});
function update_slider()
{
var offset = $('.ui-slider-handle').offset();
var value = $('#slider').slider('option', 'value');
$('#current_value').text('Value is '+value).css({top:offset.top });
$('#current_value').fadeIn();
}
Используя css
вместо animate
, вы всегда держите его рядом с ползунком в обмен на плавные переходы. Надеюсь, это поможет!