2009-04-18 53 views
0

我想创建一个时间轴播放器。移动jQuery滑块作为一个div动画位置

我有一个div对象,从屏幕的一侧移动到另一侧(即使用animate()更改div的“左”位置)。让我们假设这个动画需要5秒钟发生。

我想要一个jQuery滑块不断增加一点一点的动画旁边。滑块也需要5秒钟才能结束,以便跟踪它正在跟踪的动画。

任何人有任何想法如何实现?

回答

3

嗯。滑块有一个手柄(a元素),其中style="left: X%;"
如何以与其他动画相同的速度对此句柄进行动画处理?这里有一个例子:

var $slider = $('#slider').slider(); // initialize the slider 
var $handle = $slider.find('a'); // get the UI handle 
var $other = $('#other'); 

function moveHandle(perc, duration) { 
    $slider.slider('disable').css('opacity', 1); // we don't want the user to 
               // move it while animating 
    $handle.animate({ 
    left: perc + '%' 
    }, duration, function() { 
    $slider.slider('enable'); 
    }); 
} 
moveHandle(100, 2000); 

$other.animate({ 
    left: 300 // replace 300px with whatever you want 
}, 2000); 

一个工作演示:http://jsbin.com/iwise/36
你可以自由地扩展或修改你想要的东西。

0

我问你为什么要让滑块被动画对象控制,而不是让滑块控制动画。如果您让播放栏控制动画,则用户可以按照预期随机播放。我已将我的工作演示放在http://jsbin.com/ijoka。这个想法是有一个间隔计时器,在播放时增加播放头,并且事件触发动画。

<script type="text/javascript"> 
     var playing = false; 
     var interval; 
     var i = 0; 

     $(function() { 
       $('#slider').slider({min: 0, max: 100}); 
       $('#slider').bind('slide', function(e, ui) { i = ui.value; a(ui.value);}).bind('slidechange', function(e, ui) { a(ui.value);}); 

     }); 

     function a(p) { 
     $('#box').css('left', p + "%"); 
     } 

     function play() { 
      if(playing) { 
       playing = false; 
       clearInterval(interval); 
      } else { 
       i = $('#slider').slider('value'); 
       playing = true; 
       interval = setInterval(step, 100); 
      } 
     } 

     function step() { 
      i = i + 2; 
      $('#slider').slider('value', i); 
     } 
    </script> 
+0

cbeer,你是对的。我最终的目标是让滑块“控制”动画,因此我的上述简化问题。 现在如您的示例所示,并且正如我在考虑类似解决方案时所怀疑的,该动画非常生涩。我知道这可以通过一个较小的递增值来排序,但是这会像jQuery.animate()一样顺畅吗? – Hady 2009-04-19 11:27:43