Div, которые появляются и исчезают в цикле

Я посмотрел на все остальные вопросы, похожие или идентичные моим, но я все еще не могу найти то, что я ищу. Я все еще новичок в jquery, но все, чего я хочу, - это чтобы мои три дива были в цикле и постепенно исчезали, когда они менялись. То, что я вижу, это люди, использующие высокие скорости, первый div также исчезает, а затем последуют остальные, но я хочу, чтобы первый div просто присутствовал при загрузке страницы, а затем переключался через некоторое время. Вот мой HTML

<div id="Reviews">
    <div class="Review1">
       <p>Customer Review 1</p>
       <span class="CustomerName">- Bob</span>
     </div>
     <div class="Review2">
       <p>Customer Review 2</p>
       <span class="CustomerName">- Mary</span>
     </div>
        <div class="Review3">
        <p>Customer Review 3</p>
        <span class="CustomerName">- Jess</span>
     </div>
</div>

Теперь у меня есть отдельные классы для них, но я бы предпочел настроить запрос для постепенного появления и исчезновения, вызывая с помощью "#Reviews div" что-то вроде этого, но изменение имен классов div'ов хорошо, если необходимо сделать мой переход / на работу. Я бы предпочел просто добавить обзоры, если это необходимо, и он будет корректироваться только по имени класса или просто как div. Я также вижу кодирование, которое затухает в моих div, но следующий div будет отображаться под текущим, а затем текущий исчезнет, ​​а следующий движется вверх, где, как я хочу, чтобы он оставался вертикально выровненным, просто исчезнуть и в то время как в цикле, поэтому он всегда возвращается к первому, а затем идет снова. Я думал, что это будет легче сделать, но, видимо, нет. Я пытался использовать кодирование из того, что я видел из других вопросов, но я просто не могу найти то, что я ищу конкретно.

3 ответа

Если вы хотите сделать это в чистом CSS, вы можете сделать это, используя @keyframes

Это решение очень специфично для варианта использования. Имея 3 деления и 3 секунды видимости.

У вас может быть время X секунд, чтобы все дивы отображались один раз в цикле.

Дайте каждому div свою долю X и повторите анимацию.

Для простоты я определил X как 6 секунд, так что каждый из ваших обзоров получает 3 секунды времени.

Если вы ищете вдохновение для самостоятельной реализации чего-либо, надеюсь, это станет вашей отправной точкой.

.reviews {
  position: relative;
}
.review {
  position: absolute;
  transform-style: preserve-3d;
  animation-duration: 6s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
}
.review-1 {
  animation-name: reviewOne;
  color: red;
}
.review-2 {
  animation-name: reviewTwo;
  color: blue;
}
.review-3 {
  animation-name: reviewThree;
  color: green;
}
@keyframes reviewOne {
  0% {
    opacity: 1;
  }
  32% {
    opacity: 1;
  }
  33% {
    opacity: 0;
  }
  100% {
    opacity: 0
  }
}
@keyframes reviewTwo {
  0% {
    opacity: 0;
  }
  32% {
    opacity: 0;
  }
  33% {
    opacity: 0.5;
  }
  34% {
    opacity: 1;
  }
  65% {
    opacity: 1;
  }
  66% {
    opacity: 0;
  }
  100% {
    opacity: 0
  }
}
@keyframes reviewThree {
  0% {
    opacity: 0;
  }
  65% {
    opacity: 0;
  }
  66% {
    opacity: 0.5;
  }
  67% {
    opacity: 1;
  }
  100% {
    opacity: 1;
  }
}
<div id="reviews">
  <div class="review review-1">
    <p>Customer Review 1</p>
    <span class="CustomerName">- Bob</span>
  </div>
  <div class="review review-2">
    <p>Customer Review 2</p>
    <span class="CustomerName">- Mary</span>
  </div>
  <div class="review review-3">
    <p>Customer Review 3</p>
    <span class="CustomerName">- Jess</span>
  </div>
</div>

Вот быстрая реализация с использованием jQuery с плагином "Slick" для карусели. Запустите демо ниже, чтобы увидеть его в действии.

$(document).ready(function() {
  $('#Reviews').slick({
    fade: true, // change transition from slide to fade
    autoplay: true, // autoplay the slideshow so no interaction needed
    arrows: false // remove the default Prev/Next arrrows
  });
});
<link rel="stylesheet" type="text/css" href="http://kenwheeler.github.io/slick/slick/slick.css" />

<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>

<script type="text/javascript" src="http://kenwheeler.github.io/slick/slick/slick.js"></script>

<div id="Reviews">
  <div class="Review1">
    <p>Customer Review 1</p>
    <span class="CustomerName">- Bob</span>
  </div>
  <div class="Review2">
    <p>Customer Review 2</p>
    <span class="CustomerName">- Mary</span>
  </div>
  <div class="Review3">
    <p>Customer Review 3</p>
    <span class="CustomerName">- Jess</span>
  </div>
</div>

Если вы хотите постепенно затухать и выгружать все деления в цикле. Вы можете сделать следующее

проверить этот фрагмент

$(document).ready(function() {

  setInterval(function() {
    fadeinOut();
  }, 1000)
});
var count = -1;

function fadeinOut() {
  var reviews = $('#Reviews div');
  var reviewLength = reviews.length - 1;

  count < reviewLength ? count++ : count = 0;
  reviews.fadeOut().delay(2000).eq(count).fadeIn().addClass('top');
}
#Reviews div {} #Reviews {
  position: relative;
}
#Reviews div:not(.Review1) {
  display: none;
}
.top {
  display: block;
  z-index: 1;
  position: absolute;
  top: 0;
  left: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Reviews">
  <div class="Review1">
    <p>Customer Review 1</p>
    <span class="CustomerName">- Bob</span>
  </div>
  <div class="Review2">
    <p>Customer Review 2</p>
    <span class="CustomerName">- Mary</span>
  </div>
  <div class="Review3">
    <p>Customer Review 3</p>
    <span class="CustomerName">- Jess</span>
  </div>
</div>

Надеюсь, поможет

Другие вопросы по тегам