如何使用jQuery自定义Animate <ul> Carousel Slider?</ul>

时间:2013-12-22 21:05:14

标签: javascript jquery slider jquery-animate carousel

我正在努力构建一个没有插件的基于jQuery的小型旋转木马,我似乎无法使动画工作。这不应该自动旋转,而是仅在用户单击“下一个”或“上一个”按钮时旋转。我可以开始工作的唯一方法是自动删除最后一个元素,以便在第一个元素之前替换它......这种情况发生在瞬间,而且它是连续的,根本没有动画。

这是我的HTML容器:

<div class="carousel-nav" clearfix">
  <img src="img/prev.png" id="prv-testimonial">
  <img src="img/next.png" id="nxt-testimonial">
</div>
<div id="carousel-wrap">
  <ul id="testimonial-list" class="clearfix">
    <li>
      <p class="context">Some testimonial goes right here[1]</p>
      <span class="creds">Tiffany LastName</span>
    </li>
    <li>
      <p class="context">"We could not be more pleased. A++ efforts!"</p>
      <span class="creds">Alan Goodwrench</span>
    </li>
    <li>
      <p class="context">"After just one purchase, we know this is the company to stick with."</p>
      <span class="creds">Butters Stotch</span>
    </li>
  </ul>
</div>

#carousel-wrap 的行为与视口固定为400px(每个列表项也是400px)。 #protimonial-list 会根据项目的总数在jQuery中动态调整大小...所以4个项目在400px~ = 1600px以及一些边距/填充。这使得所有推荐书彼此相邻,因此他们应该从右侧/左侧动画进入视图。

这是我非常基本的jQuery,老实说它表现不如我所希望的那样:

$('#prv-testimonial').on('click', function(){
  var lastitm = $('#testimonial-list li:last').remove();
  $('#testimonial-list li:first').before(lastitm);
});

我只需要弄清楚两件事:

  1. 当用户点击next / prev按钮时,如何从右向左触发动画,反之亦然?

  2. 动画结束后,如何确保旋转木马无限循环?如何让“上一个”按钮从第一个项目一直移动到最后一个项目并保持连续性?

  3. 任何建议都不仅仅是值得赞赏的!

1 个答案:

答案 0 :(得分:5)

这是一个尝试:

$('#prv-testimonial').on('click', function(){
    var $last = $('#testimonial-list li:last');
    $last.remove().css({ 'margin-left': '-400px' });
    $('#testimonial-list li:first').before($last);
    $last.animate({ 'margin-left': '0px' }, 4000); });

$('#nxt-testimonial').on('click', function(){
    var $first = $('#testimonial-list li:first');
    $first.animate({ 'margin-left': '-400px' }, 4000, function() {
        $first.remove().css({ 'margin-left': '0px' });
        $('#testimonial-list li:last').after($first);
    });
});

我正在使用jquery .animate()函数来设置“margin-left”css样式的动画。 “下一步”按钮设置动画,然后将第一个元素移动到列表的末尾。 “上一步”按钮将最后一项移动到列表的前面,然后进行动画制作。

BTW:值“4000”是动画的持续时间,以毫秒为单位。

jsfiddle