javascript - 如何使用 jQuery 自定义动画 <ul> 轮播 slider ?

标签 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 的行为就像固定在 400 像素的视口(viewport)(每个列表项也是 400 像素)。 #testimonial-list 在 jQuery 中根据项目总数动态调整大小...因此 4 个项目的大小为 400px ~= 1600px 以及一些边距/填充。这使得所有推荐都彼此相邻,因此它们应该从右侧/左侧以动画方式进入 View 。

这是我非常基本的 jQuery,老实说它的性能没有我希望的那么好:

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

我只需要弄清楚两件事:

  1. 当用户单击下一个/上一个按钮时,如何从右到左触发动画,反之亦然?

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

如有任何建议,我们将不胜感激!

最佳答案

尝试一下:

$('#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 样式设置动画。 “下一步”按钮会显示动画,然后将第一个元素移动到列表的末尾。 “上一个”按钮将最后一个项目移动到列表的前面,然后进行动画处理。

顺便说一句:值“4000”是动画的持续时间(以毫秒为单位)。

jsfiddle

关于javascript - 如何使用 jQuery 自定义动画 <ul> 轮播 slider ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734050/

相关文章:

Javascript 加密

javascript - 如何限制多次加载同一个js

javascript - AngularJS 1.0.7 中使用 $http 嵌套 Promise

c# - 无需重新加载页面即可读取 XML 的最快方法是什么?

javascript - 如何在事件处理程序上更改 React 中的特定组件

javascript - 如何将 href 链接到 div id 标签 jquery slider parallax slider

javascript - JQuery 新手 - 无法显示 slider

javascript - 将类添加到在单击时应用渐变的 div 仅在第一次工作

javascript - 与 fancybox 冲突的 jquery slider

javascript - 如何触发 interact.js 事件/将所有可拖动对象恢复到默认位置 ( x : 0 , y : 0 )