Javascript работает только с одним классом

довольно новичок в Javascript. У меня есть анимация скольжения текста. Первый div работает, а второй нет. У меня есть два div, но работает только один. Любые предложения/помощь в том, что кажется неправильным?

Вот мой код ниже:

const txts = document.querySelector(".animate-text").children,
  txtsLen = txts.length;

let index = 0;

const textInTimer = 3000,
  textOutTimer = 2800;

function animateText() {
  for (let i = 0; i < txtsLen; i++) {
    txts[i].classList.remove("text-in", "text-out");
  }
  txts[index].classList.add("text-in");

  setTimeout(function () {
    txts[index].classList.add("text-out");
  }, textOutTimer);

  setTimeout(function () {
    if (index == txtsLen - 1) {
      index = 0;
    } else {
      index++;
    }
    animateText();
  }, textInTimer);
}

window.onload = animateText;
.home .tree p {
  margin: 0;
  overflow: hidden;
}
.home .tree p span {
  font-size: 2.8vw;
  color: grey;
  font-weight: 500;
  display: none;
}

.home .tree p span.text-in {
  display: block;
  animation: textIn 0.5s ease;
}
.home .tree p span.text-out {
  animation: textOut 0.5s ease;
}
@keyframes textIn {
  0% {
    transform: translateY(100%);
  }
  100% {
    transform: translateY(0%);
  }
}
@keyframes textOut {
  0% {
    transform: translateY(0%);
  }
  100% {
    transform: translateY(-100%);
  }
}
<div class = "home">
  <div class = "tree">
    <p class = "animate-text">
      <span class = "">first</span>
      <span class = "">second</span>
      <span class = "text-in">third</span>
      <span class = "">forth</span>
      <span class = "">fifth</span>
    </p>
  </div>
</div>

<div class = "home">
  <div class = "tree">
    <p class = "animate-text">
      <span class = "">first</span>
      <span class = "">second</span>
      <span class = "text-in">third</span>
      <span class = "">forth</span>
      <span class = "">fifth</span>
    </p>
  </div>
</div>

Я попробовал селектор getElementByClassName, но ни одно из предложений, которые я искал здесь, похоже, не работает.

Помните: мы не знаем, что для вас значит «работа» (согласно классическому выражению «код не «не работает», он всегда делает именно то, что вы ему сказали»), поэтому объясните, что вы ожидаете, что произойдет, основываясь на том, когда вы что-то делаете, с учетом кода, который вы показываете, а затем расскажите о том, что на самом деле происходит, и, наконец, расскажите о том, что вы уже сделали с точки зрения (повторного) исследования/исследования/отладки.

Mike 'Pomax' Kamermans 21.07.2023 02:21

Говоря о «работе», я имел в виду тот факт, что верхний текст прекрасно скользит вверх. Я пытаюсь добиться того, чтобы второй div делал то же самое, что и первый (анимация слайда вверх). Я хотел бы дублировать div, чтобы у меня было несколько анимаций слайдов с использованием одного и того же Javascript. Надеюсь, это прояснит конечный результат, который мне нужен, спасибо.

Caramelpros 21.07.2023 02:31

Я также пытался использовать document.getElementsByClassName("html-code")[0] document.getElementsByClassName("html-code")[1] для ссылки на два элемента div, но они тоже не работают. Первый div - единственный div, который выполняет Javascript, странно.

Caramelpros 21.07.2023 02:34

Это не странно. Вы вызываете .querySelector(), чтобы найти родителя <p>, и это найдет только первый такой <p> на странице.

Pointy 21.07.2023 02:38

Какой селектор следует использовать, чтобы он вызывал все теги <p> в классе animate-text?

Caramelpros 21.07.2023 02:41

Вам нужно использовать querySelectorAll('.animate-text').

Shuo 21.07.2023 02:43

Спасибо за помощь, Шуо. Но это не сработало. Я попытался заменить его, но это полностью останавливает всю анимацию (оба все еще сейчас). Спасибо за ваш вклад.

Caramelpros 21.07.2023 02:49
querySelectorAll вернет нодлист, вы можете использовать foreach, чтобы добавить анимацию ко всем .animate-text.
Shuo 21.07.2023 02:52

@Shuo - ты имеешь в виду вот так? const txts=document.querySelectorAll('.animate-text').children,txt‌​sLen=txts.length;for‌​Each(myFunction);

Caramelpros 21.07.2023 03:11

Пожалуйста, не оставляйте код в комментариях. Это не читается. Отредактируйте свой вопрос и добавьте туда код. Документация содержит примеры.

jabaa 21.07.2023 03:29

Отвечает ли это на ваш вопрос? Что возвращают методы querySelectorAll и getElementsBy*?

jabaa 21.07.2023 03:30

@Jabaa - Спасибо за ваш комментарий, а также за ваши предложения. Но я верю, что у Бретта есть решение. Спасибо, несмотря ни на что, и прекрасного дня/ночи.

Caramelpros 21.07.2023 03:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
12
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что не так в вашем коде, так это то, что document.querySelector(".animate-text") возвращает только первый элемент с классом animate-text. Вместо этого используйте querySelectorAll(), чтобы получить список всех элементов с этим классом.

const animateP = e => {

  const textInTimer = 3000, textOutTimer = 2800
  const txts = e.children
  const txtsLen = txts.length
  let index = 0

  const animateSpan = () => {
    for (let i = 0; i < txtsLen; i++)
      txts[i].classList.remove("text-in", "text-out")
    txts[index].classList.add("text-in")

    setTimeout(function () {
      txts[index].classList.add("text-out")
    }, textOutTimer)

    setTimeout(function () {
      if (index == txtsLen - 1)
        index = 0
      else
        index++
      animateSpan()
    }, textInTimer)
  }

  animateSpan()
}

document.querySelectorAll(".animate-text").forEach(e => {
  animateP(e)
})
.home .tree p {
  margin: 0;
  overflow: hidden;
}
.home .tree p span {
  font-size: 2.8vw;
  color: grey;
  font-weight: 500;
  display: none;
}

.home .tree p span.text-in {
  display: block;
  animation: textIn 0.5s ease;
}
.home .tree p span.text-out {
  animation: textOut 0.5s ease;
}
@keyframes textIn {
  0% {
    transform: translateY(100%);
  }
  100% {
    transform: translateY(0%);
  }
}
@keyframes textOut {
  0% {
    transform: translateY(0%);
  }
  100% {
    transform: translateY(-100%);
  }
}
<div class = "home">
  <div class = "tree">
    <p class = "animate-text">
      <span class = "">first</span>
      <span class = "">second</span>
      <span class = "">third</span>
      <span class = "">fourth</span>
      <span class = "">fifth</span>
    </p>
  </div>
</div>

<div class = "home">
  <div class = "tree">
    <p class = "animate-text">
      <span class = "">first</span>
      <span class = "">second</span>
      <span class = "">third</span>
      <span class = "">fourth</span>
      <span class = "">fifth</span>
    </p>
  </div>
</div>

БИНГО! Который прибивает рамку к стене. Большое спасибо, Бретт. Я пытался обернуть голову вокруг в течение нескольких дней безрезультатно. Я не могу поверить, что ты решил это. Спасибо, сэр.

Caramelpros 21.07.2023 03:38

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