<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Бегущая строка на JavaScript: создание, примеры и код]]></title><description><![CDATA[<p dir="auto">Бегущая строка на JavaScript — это динамичный элемент для сайтов, который прокручивает текст бесконечно. Она привлекает внимание к важным уведомлениям, новостям или акциям. Это решает проблему статичного контента, делая интерфейс живым и информативным.</p>
<p dir="auto">Такие строки легко интегрируются в любой проект. Они работают без плагинов, только на чистом JS, HTML и CSS. Пользователи замечают их сразу, что повышает вовлеченность. В этой статье разберем, как создать бегущую строку шаг за шагом.</p>
<h2>Основы бегущей строки в JavaScript</h2>
<p dir="auto">Бегущая строка имитирует движение текста через контейнер. JavaScript управляет позицией элементов, создавая эффект бесконечного скролла. Для горизонтального движения текст дублируется, чтобы избежать пустот при прокрутке. Вертикальный вариант работает аналогично, но с изменением высоты.</p>
<p dir="auto">Пример: текст “Новости обновлены” движется слева направо. Без JS это делали тегом , но он устарел и не поддерживается в современных браузерах. Теперь используют <strong>requestAnimationFrame</strong> для плавной анимации на 60 FPS. Это экономит ресурсы и предотвращает лаги.</p>
<ul>
<li><strong>Горизонтальный скролл</strong>: текст сдвигается по оси X с помощью <code>translateX</code> или <code>marginLeft</code>.</li>
<li><strong>Вертикальный скролл</strong>: применяется <code>translateY</code> для движения вверх-вниз.</li>
<li><strong>Пауза на hover</strong>: останавливает анимацию при наведении мыши с <code>addEventListener('mouseenter')</code>.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Направление</th>
<th>CSS-свойство</th>
<th>Пример кода</th>
</tr>
</thead>
<tbody>
<tr>
<td>Влево</td>
<td>translateX(-100%)</td>
<td><code>element.style.transform = 'translateX(-100%)';</code></td>
</tr>
<tr>
<td>Вправо</td>
<td>marginLeft отрицательное</td>
<td><code>marquee.style.marginLeft = \</code>-${marquee.i}px`;` |</td>
</tr>
<tr>
<td>Вверх</td>
<td>translateY(-100%)</td>
<td><code>translateY</code> для вертикали</td>
</tr>
</tbody>
</table>
<h2>Создание бесконечной бегущей строки</h2>
<p dir="auto">Бесконечный эффект достигается дублированием текста. Когда первый блок уходит за край, подставляется копия. Функция <code>addItemToScrolls</code> добавляет элементы в контейнер динамически. Для горизонтали создаем span с классом “text-item” и вставляем текст через <code>innerHTML</code>.</p>
<p dir="auto">Реальный пример: цикл по массиву items, где каждый элемент добавляется в несколько контейнеров. Звездочки или разделители усиливают визуал — функция <code>createStar()</code> генерирует их. Анимация запускается через <code>requestAnimationFrame(move)</code>, где <code>marquee.i</code> отслеживает позицию.</p>
<pre><code class="language-javascript">function addItemToScrolls(text) {
  horizontalTextScroll.forEach((scrollItem) =&gt; {
    const textItem = document.createElement("span");
    textItem.classList.add("text-item");
    textItem.innerHTML = text;
    scrollItem.appendChild(textItem);
  });
}
</code></pre>
<ul>
<li><strong>Дублирование</strong>: <code>marquee.innerHTML += marquee.innerHTML.repeat(10)</code> для запаса текста.</li>
<li><em>Скорость</em>: переменная <code>step = 3</code> пикселя за кадр, регулируется для плавности.</li>
<li><strong>Стоп на mouseenter</strong>: <code>marquee.step = 0</code> при наведении, возобновление на <code>mouseleave</code>.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Параметр</th>
<th>Описание</th>
<th>Значение по умолчанию</th>
</tr>
</thead>
<tbody>
<tr>
<td>step</td>
<td>Скорость сдвига</td>
<td>3 px/кадр</td>
</tr>
<tr>
<td>width</td>
<td>Ширина marquee</td>
<td>element.offsetWidth</td>
</tr>
<tr>
<td>pause</td>
<td>Пауза на hover</td>
<td>false</td>
</tr>
</tbody>
</table>
<h2>Варианты реализации и стилизация</h2>
<p dir="auto">Гибкость JS позволяет кастомизировать направление, скорость и паузу. Для ротации текста используйте <code>rotateMarquee</code>, где элементы сдвигаются циклически. Вертикальный скролл меняет <code>translateX</code> на <code>translateY</code> в keyframes CSS. Добавьте CSS-анимацию для базового движения:</p>
<pre><code class="language-css">@keyframes scroll {
  0% { transform: translateX(100%); }
  100% { transform: translateX(-100%); }
}
.marquee { animation: scroll 20s linear infinite; }
</code></pre>
<p dir="auto">Пример с несколькими контейнерами: массив <code>containers</code> с <code>items</code>, сдвиг через <code>requestAnimationFrame</code>. <em>Нюанс</em>: проверяйте <code>offsetWidth</code> для точного позиционирования. Интеграция с современными эффектами — текст раскрывается при скролле страницы через Intersection Observer.</p>
<ul>
<li><strong>Ротация</strong>: fade, slide left/right/up/down с <code>animation-iteration-count: infinite</code>.</li>
<li><strong>Скорость</strong>: <code>animation-duration: 15s</code> или JS-шаг для контроля.</li>
<li><strong>Направления</strong>: left, right, up, down через <code>direction</code> или transform.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Метод</th>
<th>Преимущества</th>
<th>Недостатки</th>
</tr>
</thead>
<tbody>
<tr>
<td>CSS keyframes</td>
<td>Простота, производительность</td>
<td>Меньше контроля</td>
</tr>
<tr>
<td>JS requestAnimationFrame</td>
<td>Полный контроль, пауза</td>
<td>Больше кода</td>
</tr>
<tr>
<td>Canvas</td>
<td>Для сложной графики</td>
<td>Переусложнено для текста</td>
</tr>
</tbody>
</table>
<h2>Продвинутые эффекты бегущей строки</h2>
<p dir="auto">Комбинируйте с раскрытием текста на скролле: оборачивайте буквы в span, используйте <code>transform: translateY</code> с задержкой по индексу. При входе в viewport срабатывает анимация через <code>scroll</code> event. Это создает <em>каскадный эффект</em>, где буквы падают сверху.</p>
<p dir="auto">Код для букв: цикл разбивает текст на span, присваивает <code>--i</code> для delay. <code>window.addEventListener('scroll')</code> проверяет видимость. Для мобильных — touch события вместо hover. Оптимизируйте: throttle события, чтобы не нагружать CPU.</p>
<ul>
<li><strong>Каскад</strong>: <code>animation-delay: calc(var(--i) * 0.1s)</code> для букв.</li>
<li><strong>Reveal on scroll</strong>: opacity от 0 к 1 при <code>getBoundingClientRect().top</code>.</li>
<li><em>Оптимизация</em>: <code>requestAnimationFrame</code> вместо <code>setInterval</code>.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Эффект</th>
<th>JS-функция</th>
<th>CSS-поддержка</th>
</tr>
</thead>
<tbody>
<tr>
<td>Бесконечный</td>
<td>moveMarquee()</td>
<td>linear infinite</td>
</tr>
<tr>
<td>Пауза</td>
<td>mouseover/out</td>
<td>hover: animation-play-state: paused</td>
</tr>
<tr>
<td>Вертикаль</td>
<td>translateY</td>
<td>keyframes 0%-100%</td>
</tr>
</tbody>
</table>
<h2>Гибкость бегущей строки в проектах</h2>
<p dir="auto">Бегущие строки подходят для дашбордов, новостных тиков и лендингов. Они заменяют устаревший  с loop и direction. В продакшене учитывайте доступность: добавьте aria-label для скринридеров. Тестируйте на разных устройствах — скорость корректируйте по FPS.</p>
<p dir="auto">Остается пространство для экспериментов: интегрируйте с WebGL для 3D-эффектов или React-компонентами. Подумайте о динамическом контенте из API — текст обновляется без перезагрузки.</p>
]]></description><link>https://forum.exlends.ru/topic/739/begushaya-stroka-na-javascript-sozdanie-primery-i-kod</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:42:02 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/739.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Feb 2026 16:59:17 GMT</pubDate><ttl>60</ttl></channel></rss>