光滑的滑块 - css过渡无限循环bug

GST*_*TAR 14 css jquery slick.js

我有一个使用光滑滑块设置的滑块.使用下一个和上一个按钮时,该项目会以一个很好的过渡进入查看.我遇到的问题是,当它重新开始循环时,第一个项目"捕捉"到视图中,而不是进行转换.此外,它似乎失去了它的内部索引,因为css"奇数"和"偶数"类被更改.请参阅下面的代码段:

$(document).ready(function() {
    $('.items').slick({
        slidesToShow: 2,
        speed: 500
    });
});
Run Code Online (Sandbox Code Playgroud)
* {
  margin: 0;
  padding: 0;
}

ul {
  list-style: none;
  height: 150px;
}

.slick-list, .slick-track {
  height: 100%;
}

ul li {
  width: 350px;
  height: 100%;
}

ul li .content {
  width: 100%;
  height: 100%;
  transition: transform 0.5s linear;
  text-align: center;
}

ul li .content span {
  color: #fff;
  font-size: 50px;
  font-family: Arial;
  position: relative;
  top: 50%;
  transform: translateY(-50%);
  display: block;
}

ul li:nth-child(odd) .content {
  background-color: red;
}

ul li:nth-child(even) .content {
  background-color: green;
}

ul li:not(.slick-current) .content {
  transform: scale(0.9);
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
<ul class="items">
  <li class="item">
    <div class="content">
      <span>1</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>2</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>3</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>4</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>5</span>
    </div>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我想我知道它为什么这样做,这是因为它必须创建"克隆"项目才能使无限循环功能起作用.我尝试了一些不同的滑块插件,它们似乎都有类似的问题.

有谁知道我怎么解决这个问题?jsfiddle在这里:https://jsfiddle.net/7kdmwkd9/1/

Con*_*Fan 12

解决方案1 ​​ - 使用Flickity

如果你想尝试另一个旋转木马控制,你可以看看Flickity.根据我使用wrapAround选项的测试,当完整循环完成时,它不会将第一个项目"捕捉"回位置; 过渡进展顺利.你可以在这个jsfiddle中看到它.

至于根据偶数/奇数索引格式化项目的问题,只有当您有奇数个项目时才会发生.一种解决方案是复制项目列表.Intead of

Item 1 / Item 2 / Item 3 / Item 4 / Item 5
Run Code Online (Sandbox Code Playgroud)

你可以定义

Item 1 / Item 2 / Item 3 / Item 4 / Item 5 / Item 1 / Item 2 / Item 3 / Item 4 / Item 5
Run Code Online (Sandbox Code Playgroud)

这将确保您使用偶数项目.


解决方案2 - Slick Slider:添加转换延迟

使用Slick Slider,为过渡添加延迟有助于在循环完成时使其更平滑.在下面的代码片段中,我替换了:

ul li .content {
  transition: transform 0.5s linear;
  ...
}

ul li:not(.slick-current) .content {
  transform: scale(0.9);
}
Run Code Online (Sandbox Code Playgroud)

ul li .content {
  transition: transform 0.3s linear;
  transition-delay: 0.5s;
  ...
}

ul li:not(.slick-current) .content {
  transform: scale(0.9);
  transition-delay: 0s;
}
Run Code Online (Sandbox Code Playgroud)

$(document).ready(function() {
  $('.items').slick({
    infinite: true,
    speed: 500,
    slidesToShow: 2,
    variableWidth: false
  });
});
Run Code Online (Sandbox Code Playgroud)
* {
  margin: 0;
  padding: 0;
}

ul {
  list-style: none;
  height: 150px;
}

.slick-list,
.slick-track {
  height: 100%;
}

ul li {
  width: 350px;
  height: 100%;
}

ul li .content {
  width: 100%;
  height: 100%;
  transition: transform 0.3s linear;
  transition-delay: 0.5s;
  text-align: center;
}

ul li .content span {
  color: #fff;
  font-size: 50px;
  font-family: Arial;
  position: relative;
  top: 50%;
  transform: translateY(-50%);
  display: block;
}

ul li:nth-child(odd) .content {
  background-color: red;
}

ul li:nth-child(even) .content {
  background-color: green;
}

ul li:not(.slick-current) .content {
  transform: scale(0.9);
  transition-delay: 0s;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
<ul class="items">
  <li class="item">
    <div class="content">
      <span>1</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>2</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>3</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>4</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>5</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>1</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>2</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>3</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>4</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>5</span>
    </div>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案,只需添加`transition-delay`就可以解决这个问题.很高兴学到这一点.投票 (2认同)

Shy*_*iya 6

@GSTAR,最终你的代码中没有错误,但是在使用光滑时你需要了解一些css和js流程.

Slick正在克隆幻灯片并修改幻灯片的顶部和底部.如下所述.

光滑实施前的代码

<ul class="items">
    <li class="item"><div class="content"><span>1</span></div></li>
    <li class="item"><div class="content"><span>2</span></div></li>
    <li class="item"><div class="content"><span>3</span></div></li>
    <li class="item"><div class="content"><span>4</span></div></li>
    <li class="item"><div class="content"><span>5</span></div></li>
    <li class="item"><div class="content"><span>6</span></div></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

光滑实施后的代码

<ul class="items">
    <li class="item slick-cloned"><div class="content"><span>4</span></div></li>
    <li class="item slick-cloned"><div class="content"><span>5</span></div></li>
    <li class="item slick-cloned"><div class="content"><span>6</span></div></li>

    <li class="item"><div class="content"><span>1</span></div></li>
    <li class="item"><div class="content"><span>2</span></div></li>
    <li class="item"><div class="content"><span>3</span></div></li>
    <li class="item"><div class="content"><span>4</span></div></li>
    <li class="item"><div class="content"><span>5</span></div></li>
    <li class="item"><div class="content"><span>6</span></div></li>

    <li class="item slick-cloned"><div class="content"><span>1</span></div></li>
    <li class="item slick-cloned"><div class="content"><span>2</span></div></li>
    <li class="item slick-cloned"><div class="content"><span>3</span></div></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

添加此项后,您的animation代码也能正常运行.但它无法在视觉上看到.如果增加这个animation时间要比它不会你的浏览器.

如果你替换javascript代码,你将会知道发生了什么.

<script type="text/javascript">
    $(document).ready(function() {
        $('.items').slick({
            centerMode:true,
            slidesToShow: 3,
            speed: 500,
            infinite: true,
            cssEase: 'linear',
            variableWidth: true
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

因此,在循环结束并到达第一个幻灯片动画并执行之前,它就完成了.

请检查下面我的代码段.

$(document).ready(function() {
    $('.items').slick({
        slidesToShow: 2,
        speed: 500
    });
});
Run Code Online (Sandbox Code Playgroud)
* {
  margin: 0;
  padding: 0;
}

ul {
  list-style: none;
  height: 150px;
}

.slick-list, .slick-track {
  height: 100%;
}

ul li {
  width: 350px;
  height: 100%;
}

ul li .content {
  width: 100%;
  height: 100%;
  transition: transform 0.5s linear;
  transition-delay: 0.5s;
  text-align: center;
}

ul li .content span {
  color: #fff;
  font-size: 50px;
  font-family: Arial;
  position: relative;
  top: 50%;
  transform: translateY(-50%);
  display: block;
}

ul li:nth-child(odd) .content {
  background-color: red;
}

ul li:nth-child(even) .content {
  background-color: green;
}

ul li:not(.slick-current) .content {
  transform: scale(0.9);
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
<ul class="items">
  <li class="item">
    <div class="content">
      <span>1</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>2</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>3</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>4</span>
    </div>
  </li>

  <li class="item">
    <div class="content">
      <span>5</span>
    </div>
  </li>
  <li class="item">
    <div class="content">
      <span>6</span>
    </div>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

在无限循环中你有用户oddevencss,所以你的下first一张幻灯片(克隆幻灯片)的循环它是绿色的,但你的原始幻灯片(第一张幻灯片)有红色,因此它也会轻弹颜色.如果您使用幻灯片数量%2,则不会发生这种情况.

在此输入图像描述

希望它能帮助你更好地理解.