HTML-прокрутка текста шире контейнера

Я работал над этим некоторое время и еще не придумал подходящего решения.

У меня есть текст баннера, который абсолютно необходимо прокручивать/выделять. Пример, который я использую, — это биржевые данные, но это другой, определяемый пользователем на лету текст, который в конечном итоге войдет в мое окончательное решение для страницы.

Проблема, которую я пытаюсь решить, заключается в том, что текст обрезается и не полностью отображает весь текст перед повторением.

Вторичным будет плавный переход перед перезапуском. то есть действительно "круговой" цикл.

Тем не менее, это довольно стандартная «выделительная рамка» на основе HTML/CSS.

Любые идеи по вышеизложенному будут оценены.

var text = 'Symbol: BABA Open: 168.71 Latest: 166.15 Change: -2.23 Symbol: PEP Open: 115.87 Latest: 115.91 Change: 3.32 Symbol: AAPL Open: 171.47 Latest: 170.42 Change: -0.38 Symbol: AMZN Open: 1627.86 Latest: 1607.95 Change: -14.7 Symbol: FB Open: 164.7 Latest: 162.5 Change: -1.45 Symbol: NFLX Open: 359 Latest: 356.87 Change: -2.2 Symbol: USO Open: 11.61 Latest: 11.71 Change: 0.23 Symbol: NKE Open: 85.56 Latest: 85.38 Change: 0.7 Symbol: YUM Open: 94.69 Latest: 94.12 Change: 0.27 Symbol: LEE Open: 2.64 Latest: 2.61 Change: -0.02';

//text is cutoff at width of parent container
$("#marquee-text").text(text);
.scroller {
  height: 20px;
  overflow: hidden;
  position: relative;
}

.scroller p,
.scroller span {
  /*font-size: 3em;*/
  white-space: nowrap;
  color: black;
  position: absolute;
  width: 100%;
  /*height: 100%;*/
  margin: 0;
  /*line-height: 50px;*/
  /*text-align: center;*/
  /* Starting position */
  -moz-transform: translateX(100%);
  -webkit-transform: translateX(100%);
  transform: translateX(100%);
  /* Apply animation to this element */
  -moz-animation: example1 15s linear infinite;
  -webkit-animation: example1 15s linear infinite;
  animation: example1 15s linear infinite;
}


/* Move it (define the animation) */

@-moz-keyframes example1 {
  0% {
    -moz-transform: translateX(100%);
  }
  100% {
    -moz-transform: translateX(-100%);
  }
}

@-webkit-keyframes example1 {
  0% {
    -webkit-transform: translateX(100%);
  }
  100% {
    -webkit-transform: translateX(-100%);
  }
}

@keyframes example1 {
  0% {
    -moz-transform: translateX(100%);
    /* Firefox bug fix */
    -webkit-transform: translateX(100%);
    /* Firefox bug fix */
    transform: translateX(100%);
  }
  100% {
    -moz-transform: translateX(-100%);
    /* Firefox bug fix */
    -webkit-transform: translateX(-100%);
    /* Firefox bug fix */
    transform: translateX(-100%);
  }
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id = "marquee-div" class = "scroller">
  <span id = "marquee-text"></span>
</div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
1 207
3

Ответы 3

Если вам нужна действительно круглая область без очистки экрана до того, как снова появится первый бит текста, вам придется дважды скопировать слой div, чтобы второй появился сразу после окончания первого (в противном случае вы получите разрыв между текст начинается снова, проверьте это для простого примера:

<div class = "marquee">
  <div>
    <span>You spin me right round, baby. Like a record, baby.</span>
    <span>You spin me right round, baby. Like a record, baby.</span>
  </div>
</div>

и CSS:

.marquee {
  height: 25px;
  width: 420px;

  overflow: hidden;
  position: relative;
}

.marquee div {
  display: block;
  width: 200%;
  height: 30px;

  position: absolute;
  overflow: hidden;

  animation: marquee 5s linear infinite;
}

.marquee span {
  float: left;
  width: 50%;
}

@keyframes marquee {
  0% { left: 0; }
  100% { left: -100%; }
}

(взято из примера выделения https://codepen.io/jamesbarnett/pen/kfmKa[прокрутка css][1]

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

Sean Nilsen 19.02.2019 00:23

Вы можете использовать старомодное выделение:

<marquee behavior = "scroll" direction = "left" scrollamount = "80" scrolldelay = "1000">
   <span id = "marquee-text"></span>
</marquee>

Хотя это старый html, но он отлично работает во всех браузерах.

var text = 'Symbol: BABA Open: 168.71 Latest: 166.15 Change: -2.23 Symbol: PEP Open: 115.87 Latest: 115.91 Change: 3.32 Symbol: AAPL Open: 171.47 Latest: 170.42 Change: -0.38 Symbol: AMZN Open: 1627.86 Latest: 1607.95 Change: -14.7 Symbol: FB Open: 164.7 Latest: 162.5 Change: -1.45 Symbol: NFLX Open: 359 Latest: 356.87 Change: -2.2 Symbol: USO Open: 11.61 Latest: 11.71 Change: 0.23 Symbol: NKE Open: 85.56 Latest: 85.38 Change: 0.7 Symbol: YUM Open: 94.69 Latest: 94.12 Change: 0.27 Symbol: LEE Open: 2.64 Latest: 2.61 Change: -0.02';

//text is cutoff at width of parent container
$("#marquee-text").text(text);
.scroller {
 height: 20px;  
 overflow: hidden;
 position: relative;
}
.scroller p, .scroller span {
 /*font-size: 3em;*/
 white-space: nowrap;
 color: black;
 position: absolute;
 width: 100%;
 
 /*height: 100%;*/
 margin: 0;
 /*line-height: 50px;*/
 /*text-align: center;*/
 /* Starting position */
 -moz-transform:translateX(100%);
 -webkit-transform:translateX(100%);    
 transform:translateX(100%);
 /* Apply animation to this element */  
 -moz-animation: example1 20s linear infinite;
 -webkit-animation: example1 20s linear infinite;
 animation: example1 20s linear infinite;
}
/* Move it (define the animation) */
@-moz-keyframes example1 {
 0%   { -moz-transform: translateX(100%); }
 100% { -moz-transform: translateX(-100%); }
}
@-webkit-keyframes example1 {
 0%   { -webkit-transform: translateX(100%); }
 100% { -webkit-transform: translateX(-100%); }
}
@keyframes example1 {
 0%   { 
 -moz-transform: translateX(100%); /* Firefox bug fix */
 -webkit-transform: translateX(100%); /* Firefox bug fix */
 transform: translateX(100%);       
 }
 100% { 
 -moz-transform: translateX(-100%); /* Firefox bug fix */
 -webkit-transform: translateX(-100%); /* Firefox bug fix */
 transform: translateX(-100%); 
 }
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<marquee behavior = "scroll" direction = "left" scrollamount = "80" scrolldelay = "1000">
   <span id = "marquee-text"></span>
</marquee>

Я не могу с чистой совестью использовать элемент, который устарел и может потерять поддержку браузера, когда они соберутся его удалить. w3.org/TR/2010/WD-html5-20100304/…

Sean Nilsen 19.02.2019 00:14

хорошо, попробуй это, хотя время ожидания какое-то время jsfiddle.net/pqrs0v9a/2

Patrick Igwe 19.02.2019 00:41

Спасибо! Любые идеи о том, как сократить «задержку перед появлением»? Я возился с начальными значениями translateX, и это, похоже, мало помогает. Я знаю, что это связано с первоначальной шириной div, но я не могу заставить его появиться, как только данные будут установлены.

Sean Nilsen 19.02.2019 21:01

Я уменьшил время загрузки с 50 с до 29 с jsfiddle.net/v7cu2zme/1

Patrick Igwe 20.02.2019 17:11

Я обнаружил проблему с усечением данных в родительском контейнере и не могу поверить, что пропустил:

 .scroller p, .scroller span {
   ...
   width: 100%; /* <== THIS */
   ...
 }

Я собираюсь вернуться и поработать с предложением «200%» по другой половине проблемы, но основная проблема решена.

Спасибо всем за то, что вы всегда были потрясающей декой!

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