Анимация трансформации не работает для первого слайда в начальной загрузке - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть карусель начальной загрузки 4.0, и мне нужен эффект масштабирования, когда каждый слайд активен.Я использовал transform: scale свойство для его достижения.Я применил transform: scale к .carousel-item.active img элементу.И я добавил активный класс для первого элемента, используя jquery.Анимация не работает для моего первого слайда.Когда это зацикливается, это работает.Я попытался добавить класс в функцию setTimeOut, но это не помогло.Кто-нибудь может мне помочь?

Это мои коды

html

    <div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item">
      <img class="d-block w-100" src="https://placeimg.com/640/480/any" alt="First slide">
    </div>
    <div class="carousel-item">
      <img class="d-block w-100" src="https://placeimg.com/640/480/nature" alt="Second slide">
    </div>
    <div class="carousel-item">
      <img class="d-block w-100" src="https://placeimg.com/640/480/animals" alt="Third slide">
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>

css

.carousel-item img{
  transition: all 1s;
  transform:scale(1);
}

.carousel-item.active img{
  transform:scale(1.2);
}

jquery

window.setTimeout(function(){
                $('#carouselExampleControls .carousel-item:first-child').addClass('active');
            },2000);

Вот скрипка для того же

1 Ответ

0 голосов
/ 18 сентября 2018

Я думаю, что сначала вы не должны изменять «активный» класс с помощью JavaScript, всегда пытайтесь сначала найти только решение CSS и поместить активный класс уже в HTML следующим образом:

<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img class="d-block w-100" src="https://placeimg.com/640/480/any" alt="First slide">
    </div>

Также я где-то читал, что использование анимации вместо преобразования требует гораздо меньше ресурсов процессора, поэтому перейдите к ключевым кадрам, например:

@-webkit-keyframes zoom {
    from {
        -webkit-transform: scale(1, 1);
    }
    to {
       -webkit-transform: scale(1.2, 1.2);
    }
}

@keyframes zoom {
    from {
        transform: scale(1, 1);
    }
    to {
        transform: scale(1.2, 1.2);
    }
}

А потом CSS:

.carousel-inner .carousel-item.active > img {
    -webkit-animation: zoom 1s forwards;
    animation: zoom 1s forwards;
}

Рабочая скрипка: http://jsfiddle.net/v2nc9hx3/

...