В данном примере скачок кажется небольшим; однако в моем проекте с большими размерами шрифтов и разными шрифтами эта проблема становится более явной. После завершения анимации и появления нового текста текст подпрыгивает, как будто возвращается в исходное положение. Для него я также создал проект 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()
})
<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>
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 */
}
Я бы хотел избежать перехода после появления нового слова. Как видите, как только появляется новое слово, оно снова прыгает. В примере с CodePen скачок не так заметен, но с другими шрифтами он гораздо более заметен и действительно портит анимацию. @ŁukaszD.Mastalerz
Это очень сложно диагностировать, если это не видно на Codepen. Потому что термин «прыжок» может охватывать множество событий. Может попробуйте сделать гифку или что-то подобное...
Я обновил его на другой шрифт и теперь надеюсь, что проблема стала более заметной. Как будто расстояние между буквами постоянно меняется. @ŁukaszD.Mastalerz



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Эта проблема описана в документации.
Важно! Следующий стиль следует применять ко всем целевым объектам. элементы. Это предотвращает незначительное смещение символов при текст разделен/отменен.
.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 */
}
Но чего именно вы хотели бы достичь?