Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Почему анимация дёргается и встаёт в исходное положение вместо того, чтобы продолжаться?

#html #css #css3




.header_mid {
  height: 100px;
}
.header_mid .logo_slide {
  padding: 25px 0;
  height: 50px;
  overflow: hidden;
  position: relative;
}
.header_mid .logo_slide ul {
  display: block;
  width: 200%;
  height: 50px;
  position: absolute;
  overflow: hidden;
  animation: marquee 10s linear infinite;
}
.header_mid .logo_slide .logo_item {
  height: 50px;
  padding: 0 20px;
  float: left;
}
@keyframes marquee {
  0% {
    left: 0;
  }
  100% {
    left: -100%;
  }
}
.header_mid .logo_slide ul:hover {
  animation-play-state: paused;
}





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

Бегущая строка должна быть сделана без использования js и должна быть резиновой.
Javascript крайний вариант.   

Вот ссылка на мою бегущую строку.
    


Ответы

Ответ 1



Проблема в установке ширины. В примере 7-ой элемент идет под первым, поэтому он визуально перекидывает на 1-ый элемент. Если расширить блок, то он дальше будет крутить. Уверен, что задавать ширину в % таким способом есть плохо. .header_mid { height: 100px; } .header_mid .logo_slide { padding: 25px 0; height: 50px; overflow: hidden; position: relative; } .header_mid .logo_slide ul { display: block; width: 350%; height: 50px; position: absolute; overflow: hidden; animation: marquee 10s linear infinite; } .header_mid .logo_slide .logo_item { height: 50px; padding: 0 20px; float: left; } @keyframes marquee { 0% { left: 0; } 100% { left: -250%; } } .header_mid .logo_slide ul:hover { animation-play-state: paused; }
  • WebMoney logo1
  • PerfectMoney logo2
  • Qiwi logo3
  • YandexMoney logo4
  • OkPay logo5
  • ADVcash logo6
  • PayPal logo7
  • Payeer logo8
  • Bitcoin logo9
  • OneCoin logo10
  • SwisCoin logo11
http://jsfiddle.net/tfsc3qkp/6/

Ответ 2



Прошло много времени с момента публикации вопроса, а я так и не написал решение. Решения оказалось костлявым. Исходя из комментариев пользователя @Утка было решено дублировать список и подогнать параметры анимации так, чтобы новый запуск анимации происходил ровно в тот момент, когда выезжает дубль. Все это с фиксированной шириной списка. .header_mid { height: 100px; } .header_mid .logo_slide { padding: 25px 0; height: 50px; overflow: hidden; position: relative; width:100%; margin: auto; } .loop, .loop-clone { display: block; -width: 200%; width:1510px; height: 50px; position: absolute; overflow: hidden; } .loop { animation: marquee 60s linear infinite; } .loop-clone { animation: marquee-clone 60s linear infinite; } .header_mid .logo_slide .logo_item { height: 50px; padding: 0 20px; float: left; } @keyframes marquee { 0% { left: 0; } 50% { left: -1510px; } 50.001% { left: 1510px; } 100% { left: 0; } } @keyframes marquee-clone { 0% { left: 1510px; } 50% { left: 0; } 100% { left: -1510px; } } .header_mid .logo_slide:hover ul,.header_mid .logo_slide .loop-clone ul { animation-play-state: paused; }
  • PerfectMoney logo
  • Qiwi logo
  • YandexMoney logo
  • OkPay logo
  • ADVcash logo
  • PayPal logo
  • Payeer logo
  • Bitcoin logo
  • OneCoin logo
  • SwisCoin logo
  • PerfectMoney logo
  • Qiwi logo
  • YandexMoney logo
  • OkPay logo
  • ADVcash logo
  • PayPal logo
  • Payeer logo
  • Bitcoin logo
  • OneCoin logo
  • SwisCoin logo


Ответ 3



.header_mid { display: block; width: 100%; white-space: nowrap; overflow: hidden; } .logo_item { display: inline-block; } .logo_slide { display: inline-block; padding-left: 100%; animation: scroll 4s infinite linear; } @keyframes scroll { 0% { transform: translate(0, 0); } 100% { transform: translate(-100%, 0); } }

Комментариев нет:

Отправить комментарий