#javascript #css #arrays #if-statement #iteration
#javascript #css #массивы #if-оператор #итерация
Вопрос:
Я писал этот небольшой скрипт, чтобы создать анимацию «самописного текста». Дело в том, что каждый раз, когда слово заканчивается, оно переходит прямо к следующему. Я не могу разобраться в этом, чтобы сделать так, чтобы каждая буква удалялась перед передачей следующего слова в массиве.
const text = ['design', 'make', 'develop', 'code', 'create']
let count = 0;
let index = 0;
let currentText = "";
let letter = "";
(function type() {
if (count === text.length) {
count = 0;
}
currentText = text[count];
letter = currentText.slice(0, index);
document.querySelector(".main__animation").textContent = letter;
if (letter.length === currentText.length) {
count
index = 0;
}
setTimeout(type, 500);
}())
Заранее спасибо!
Комментарии:
1. «сделайте так, чтобы каждая буква удалялась перед передачей следующего слова в массиве» Что это значит? Когда слово заканчивается, вы хотите анимировать удаление каждой буквы перед отображением следующего слова? Если да, вы хотите удалить слева направо или справа налево?
Ответ №1:
const text = [, 'design', 'make', 'develop', 'code', 'create']
let count = 1;
let index = 0;
let currentText = "";
let letter = "";
var deleting = false;
(function type() {
if (count === text.length) {
count = 1;
}
currentText = text[count];
if (deleting) {
letter = currentText.slice(0, --index);
} else {
letter = currentText.slice(0, index);
}
document.querySelector(".main-animation").textContent = letter;
if (letter.length === currentText.length) {
deleting = true;
}
if (letter.length === 0) {
count ;
index = 0;
deleting = false;
}
setTimeout(type, 500);
}())
<div class="main-animation"></div>
Ответ №2:
Это то, что я придумал. Пожалуйста, дайте мне знать, если есть какие-либо сомнения.
function createAnimation(words, target, speed) {
let wordIndex = 0;
let i = 0;
let erase = false;
const handler = () => {
const word = words[wordIndex];
if (erase) {
target.innerText = target.innerText.slice(0, -1);
if (!target.innerText.length) {
wordIndex = (wordIndex 1) % words.length;
i = 0;
erase = false;
}
} else {
target.innerText = word.charAt(i);
i ;
if (i === word.length) {
erase = true;
}
}
};
let interval = null;
return {
start() {
interval = setInterval(handler, 1000 / speed)
},
stop() {
clearInterval(interval);
}
}
}
const animation = createAnimation(
['design', 'make', 'develop', 'code', 'create'],
document.getElementById('target'),
5 // [letters/s]
);
animation.start();
// TO STOP, CALL animation.stop()
<h1 id='target'></h1>