このコードは、スライドdiv
がコンテナ内にあることを前提としていますが、ブラウザウィンドウを参照として使用するように簡単に調整できる必要があります。
var speed = .5; // higher number = faster animation
var originalPosition = null;
$('#container').mousedown(function(){
var $slider = $('#slider');
var start = $slider.position().top;
if(!originalPosition) {
originalPosition = {top: start};
}
var end = $(this).height() - $slider.height();
var duration = (2/speed) * (end - start);
$slider.css({
position: 'absolute',
top: start+'px',
}).stop().animate({
top: end+'px'
},duration);
}).mouseup(function(){
var $slider = $('#slider');
$slider.stop();
var start = $slider.position().top;
var end = originalPosition.top;
var duration = (2/speed) * (start - end);
$slider.animate({
top: end+'px'
},duration,function(){
$(this).css({position: 'static'});
});
});
次に例を示します。jsFiddle:DEMO
div
このソリューションには、スライドする必要がある距離に基づいてアニメーションの長さを調整できるという利点があります。このように、アニメーションの「速度」は一定です。