Как исправить этот эффект прыжка после текстовой анимации?

В данном примере скачок кажется небольшим; однако в моем проекте с большими размерами шрифтов и разными шрифтами эта проблема становится более явной. После завершения анимации и появления нового текста текст подпрыгивает, как будто возвращается в исходное положение. Для него я также создал проект Codepen.

Яваскирпт

import SplitType from "https://cdn.skypack.dev/[email protected]";
import gsap from "https://cdn.skypack.dev/[email protected]";

function animateWords() {

  const words = ["word1","word2","word3"]

  let currentIndex = 0
  let split
  const textElement = document.querySelector('.primary-h1 span')

  function updateText() {
    textElement.textContent = words[currentIndex]
    split = new SplitType(textElement, {type: 'lines' })
    animateChars(split.chars)
    currentIndex = (currentIndex + 1) % words.length
  }

  function animateChars(chars) {
    gsap.from(chars, {
      yPercent: 100,
      stagger: 0.03,
      duration: 1,
      ease: 'power4.out',
      rotate:10,
      onComplete: () => {
        if (split) {
          split.revert();
        }
      }
    })
  }

  setInterval(updateText, 3000)

}
document.addEventListener('DOMContentLoaded', () => {

    

  animateWords()
  
  
})

HTML

<main class = "hero">
      <div class = "left layout-ws">
        <h1>
          <div class = "mask primary-h1">
            <span>word</span>
          </div>
          <div class = "mask">
            <span>randomtext</span>
          </div>
        </h1>
      </div>
</main>

CSS

main {

  .left {
    align-self:last baseline;
    flex: 1;
    height: 90vh;
    display: flex;

    h1 {
      font-size: clamp(10rem, 17vw, 10rem);
      align-self:last baseline;
      font-weight: 100;
      margin: 0;
    }
  }
  
.mask {
  overflow: hidden;
}

.layout-ws {
  width: 100%;
  box-sizing: border-box;
  padding: clamp(16px, 5%, 30px); /* Adjust for fluid side margins */

}

Но чего именно вы хотели бы достичь?

Łukasz D. Mastalerz 19.05.2024 15:34

Я бы хотел избежать перехода после появления нового слова. Как видите, как только появляется новое слово, оно снова прыгает. В примере с CodePen скачок не так заметен, но с другими шрифтами он гораздо более заметен и действительно портит анимацию. @ŁukaszD.Mastalerz

SZENTIOSZ the SZAMOSZ 19.05.2024 15:45

Это очень сложно диагностировать, если это не видно на Codepen. Потому что термин «прыжок» может охватывать множество событий. Может попробуйте сделать гифку или что-то подобное...

Łukasz D. Mastalerz 19.05.2024 16:18

Я обновил его на другой шрифт и теперь надеюсь, что проблема стала более заметной. Как будто расстояние между буквами постоянно меняется. @ŁukaszD.Mastalerz

SZENTIOSZ the SZAMOSZ 19.05.2024 16:51
Поведение ключевого слова "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
4
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Эта проблема описана в документации.

Важно! Следующий стиль следует применять ко всем целевым объектам. элементы. Это предотвращает незначительное смещение символов при текст разделен/отменен.

.target { font-kerning: none; } Кроме того, если целевые элементы внутри гибкого контейнера они должны иметь определенную ширину, чтобы предотвратить текст не перемещается, когда он разделяется.

https://www.npmjs.com/package/split-type#splitting-text

Набор:

.layout-ws {
  width: 100%;
  font-kerning: none;
  box-sizing: border-box;
  padding: clamp(16px, 5%, 30px); /* Adjust for fluid side margins */
}

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