CSS Анимация, плавное изменение background-image

215
04 марта 2019, 09:00

Всем доброго вечера, есть анимация:

@keyframes headerLane {
    0% {
        background-image: url(../images/header_1.jpg);
    }
    50% {
        background-image: url(../images/header_2.jpg);
    }
    100% {
        background-image: url(../images/header_3.jpg);
    }
}

Вот я применяю её к блоку:

animation: headerLane 7s linear infinite alternate;
background-position: 0px 70% !important;
background-size: cover;

Вопрос заключается в следующем: почему изображения меняются плавно, как будто к ним добавлено свойство transition? Разве оно не должно просто в течении 7 секунд переключится 3 раза?

Если в этом и заключается суть анимации, не только в повторении движения а ещё и исполнения этого плавно то у меня возникает вопрос, как сделать резкую смену картинок без всяческих эффектов?

Answer 1

Могу предложить вот такой вариант, работает скачками как вы просили: (для 4-ех картинок будет 0%,25%,50,75%,100% последняя и предпоследняя должны повторятся, так как 100% это конец анимации)

@keyframes headerLane {
    0% {
        background-image: url(../images/header_1.jpg);
    }
    33% {
        background-image: url(../images/header_2.jpg);
    }
    66% {
        background-image: url(../images/header_3.jpg);
    }
    100% {
        background-image: url(../images/header_3.jpg);
    }
}

Код анимации (можете перепить в одну строку):

animation-name: headerLane;
animation-duration: 21s;
animation-fill-mode: forwards;
animation-iteration-count: infinite;
animation-timing-function: steps(1, end);

PS: длительность нужно умножать на количество элементов которое вы хотите слайдить

Answer 2

https://html5book.ru/css3-animation/ Вот хорошая статья про анимации, обратите внимание на 8 пункт, если я все правильно понял, вы записали кратко свойство animation-duration, которое описывается в 3 пункте, поэтому у вас и происходит плавная анимация.

Answer 3

Именно за то что вам необходимо отвечает свойство: animation-timing-function: steps(1, end); и так как оно отсутствует в вашем коде результат не получается должным.

READ ALSO
Отложить загрузку <script>

Отложить загрузку <script>

Есть достаточно массивная карта:

180
Ребят нужно помощь по Owl slider

Ребят нужно помощь по Owl slider

Как на всех мобильниках отключить свойство autoplay, пробовал черезtrigger отключать при проверке на разрешение <768px, но всё равно не хочет работать...

200