Рухомий рядок Javascript

Рухомий рядок на Javascript

Минулого разу, я розповідав вам, як створити рухомий рядок на сайті за допомогою CSS. А сьогодні, пропоную розглянути тему, як створити нескінчений рухомий рядок на Javascript.

Рухомий рядок на чистому JS

<!DOCTYPE html>
<html lang="uk">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Рухомий рядок</title>

    <style>
.moving-line-wrapper {
  margin:0 auto; /*вирівнюємо елемент по центру*/
  width: 600px; /*встановлюємо ширину елемента*/
  font-size: 26px; /*задаємо розмір шрифта для тексу*/
  overflow: hidden; /*відображаємо рухомий рядок тільки в заданій області*/
  position: relative; /*встановлюємо відносне позиціювання елемента*/
  border-radius: 4px; /*заокруглюємо краї меж елемента*/
  box-shadow: 0 0 10px rgba(0,0,0,0.5); /*додаємо тінь*/
  background-color: #63c8ff; /*встановлюємо колір тіла елемента*/
}

/*Після основного елемента виводимо наступний контент*/
.moving-line-wrapper:after {
  position: absolute; /*встановлюємо абсолютне позиціювання елемента*/
  content: ' '; /*новий вміст елемента*/
  right: 0; /*встановлюємо відстань відступу від правого краю батьківського елемента до правого краю дочірнього елемента.*/
  top: 0; /*встановлюємо відстань від верхнього краю батьківського елементу до верхнього краю дочірнього елемента*/
  width: 100%; /*ширина елемента*/
  height: 100%; /*висота елемента*/
  background-image: linear-gradient(to right, #fff, transparent, #fff); /*застосовуємо для елемента лінійний градієнт*/
}

.moving-line {
  padding-left: 100%; /*встановлюємо початкову позицію текста за межами блоку з правої сторони*/
  white-space: nowrap; /*відображення пробілів без переносу рядків*/
}
    </style>
</head>
<body>
    <div class="moving-line-wrapper">
        <p class="moving-line">Текст рухомого рядка</p>
    </div>
	
<script>
let wrapper = document.querySelector('.moving-line-wrapper'),
    movLine = document.querySelector('.moving-line'),   
    wrapperWidth = wrapper.offsetWidth,
    movLineWidth = movLine.scrollWidth;
    
function move() {
  let currentTX = getComputedStyle(movLine).transform.split(',');
  if( currentTX[4] === undefined ) {
    currentTX = -1;
  } else {
    currentTX = parseFloat(currentTX[4]) - 1;
  }
  
  if(-currentTX >= movLineWidth) {
    movLine.style.transform = 'translateX(' + wrapperWidth + 'px)';
  
  } else {
    movLine.style.transform = 'translateX(' + currentTX + 'px)';
  }
}

let interval = setInterval(move, 10); // швидкість рухомого рядка (чим нижче значення ти швидша анімація)
</script>

</body>
</html>

Main Menu