2012-08-11 40 views

回答

0

看看这个DEMO

这里是JavaScript的:

var timer, 
    selectLi = (function() { 
     var $block = $('.block'), 
      $container = $('.container'), 
      $lis = $('.container ul li'), 
      liWidth = $lis.width(), 
      $selectedLi; 

     return function() { 
      var pos = $block.offset().left - $container.offset().left, 
       liNum = Math.round(pos/liWidth); 
      $selectedLi && $selectedLi.removeClass('selected'); 
      $selectedLi = $($lis.get(liNum)); 
      $selectedLi.addClass('selected'); 
     }; 
    })(); 

$('.block').click(function() { 
    timer = setInterval(selectLi, 30); 
    $(this).animate({ 
     left: 0 
    }, function() { 
     clearInterval(timer); 
    }); 
}); 
+0

谢谢车厂..小提琴工作正常。 – user1184100 2012-08-11 15:42:45

+0

太棒了!很高兴工作。 – 2012-08-11 15:50:22

2

如果使用新的jQuery 1.8,你可以实际执行的动画,并得到一个承诺回来,返回的对象还包含了动画状态,吐温等,并且可以使用那算得了什么元素的类申请,这是有点实验性的,我刚开始玩这个左右,但这样的:

$(function() { 
    $('.block').on('click', function(){ 
     var ani = $.Animation(this, {left:0}, {duration: 1000}); 

     ani.progress(function(e) { 
      var Now = e.tweens[0].now, 
       idx = Math.round(Now/10); 
      $(".container ul li").eq(idx).addClass('selected').siblings().removeClass('selected'); 
     }); 
    });  
});  

FIDDLE

+0

感谢adeno的代码,看起来很有趣 – user1184100 2012-08-11 15:43:57

+1

@ user1184100 - 实际上它非常棒!不仅仅是我的回答,而且他们在1.8版本中添加了一个缓存的动画和补间动画? – adeneo 2012-08-11 15:53:58

+0

你是对的,但这两个答案都很棒特别是这一个..但不得不安定下来,再次感谢代码这很酷 – user1184100 2012-08-11 16:15:29