Рубрики
Без рубрики

Простой эффект печати Pure JS (новичок)

Эффект набора текста – это простая, но стильная анимация, используемая многими блоггерами и веб -разработчиками для вступления … Tagged with JavaScript, Tutorial, Codenewbie, Codepen.

Эффект набора текста – это простая, но стильная анимация, используемая многими блоггерами и веб -разработчиками, чтобы представиться элегантно.

Этот урок покажет вам, как создать эффект набора типирования с помощью простых CSS и JS (без библиотек).

Начнем с создания держателя текста P с классом typetext Анкет

    

Мы добавляем мигающий курсор после нашего абзаца с анимацией CSS:

.typeText::after {
  content: "|";
  animation: blink 1s infinite;
}

@keyframes blink {
  0%, 100% {opacity: 1;}
  50% {opacity: 0;}
}

Псевдо класс :: После собирается добавить курсор | И заставьте его мигать с миганием анимации KeyFrames.

Если вы не знакомы с анимациями, я сделал представление в CSS Animations здесь.

Вот все JS к эффекту набора текста:

var typeText = document.querySelector(".typeText")
var textToBeTyped = "a software engineer"
var index = 0, isAdding = true

function playAnim() {
  setTimeout(function () {
    // set the text of typeText to a substring of
    // the textToBeTyped using index.
    typeText.innerText = textToBeTyped.slice(0, index)
    if (isAdding) {
      // adding text
      if (index > textToBeTyped.length) {
        // no more text to add
        isAdding = false
        //break: wait 2s before playing again
        setTimeout( function () {
          playAnim()
        }, 2000)
        return
      } else {
        // increment index by 1
        index++
      }
    } else {
      // removing text
      if (index === 0) {
        // no more text to remove
        isAdding = true
      } else {
        // decrement index by 1
        index--
      }
    }
    // call itself
    playAnim()
  }, 120)
}
// start animation
playAnim()

Playanim () Функция вызывает себя неоднократно, используя settimeout с задержкой 120 мс.

С помощью метода строки Slice (0, Index) Мы устанавливаем текст typetext к подстроению TextTobeTyped Анкет

typeText.innerText = textToBeTyped.slice(0, index)

Индекс начинается с 0 и приращением к 1, когда мы добавляем и уменьшаем на 1, когда мы удаляемся.

Isadding это логический, который используется для проверки, добавляем ли мы или удаляем.

Когда Индекс больше длины TexttobeTyped , мы устанавливаем Isadding ложно, чтобы начать удаление. И когда Индекс равна 0, мы установили Isadding верно, чтобы начать добавлять снова.

После того, как он закончил добавление, Settimeout с задержкой на 2000 мс создаст перерыв для людей, чтобы прочитать текст, прежде чем он снова будет удален.

if (index > textToBeTyped.length) {
  // no more text to add
  isAdding = false
  //break: wait 2s before playing again
  setTimeout( function () {
    playAnim()
  }, 2000)
  return
}

И мы получаем:

Вот и все! Теперь вы должны быть в состоянии сделать свой собственный эффект печати.

Я пытался сделать это подходящим для начинающих Но я думаю, что мои объяснения не были такими хорошими 😅. Если у вас есть вопросы, пожалуйста, оставьте комментарий или поразите меня в моих социальных сетях 😁.

За пределами оснований

Анимация курсора может быть сделана более реалистичной, добавив встроенную анимационную функцию Степень Наша мигальная анимация как это:

.typeText::after {
  content: "|";
  /* animation: blink 1s infinite; */
  animation: blink 1s step-end infinite;
}

шаги являются недавним дополнением к CSS. Они нарушают поток анимации, играя в нее в прыжках. Единственная разница между двумя анимациями ниже – добавление шагов во 2 -й Div.

Мы можем увеличить скорость удаления, изменяя задержку Settimeout с логическим Isadding и такой тройной оператор, как это:

function playAnim() {
  setTimeout(function () {
    // ...
  }, isAdding ? 120 : 60)

Тройной оператор означает, если он добавляет, установите задержку на 120 мс. Если он удаляет, установите задержку на 60 мс.

И вместо того, чтобы вводить одну строку, мы можем выбрать массив строки TexttobeTypedArr быть напечатанным по очереди. И TexttobeTypedIndex переменная, чтобы отслеживать текущий текстовый индекс в массиве. TextToBeTypEdIndex будет обновляться каждый раз после того, как мы закончим удаление предыдущего текста.

var typeText = document.querySelector(".typeText")
// var textToBeTyped = "a software engineer"
var textToBeTypedArr = ["a software engineer", "a warlord", "a king", "a peasant"]
var index = 0, isAdding = true, textToBeTypedIndex = 0

function playAnim() {
  setTimeout(function () {
    // set the text of typeText to a substring of the text to be typed using index.
    typeText.innerText = textToBeTypedArr[textToBeTypedIndex].slice(0, index)
    if (isAdding) {
      // adding text
      if (index > textToBeTypedArr[textToBeTypedIndex].length) {
        //...
      } else {
        //...
      }
    } else {
      // removing text
      if (index === 0) {
        //...
        //switch to next text in text array
        textToBeTypedIndex = (textToBeTypedIndex + 1) % textToBeTypedArr.length
      } else {
        //...
      }
    }
    // calls itself
    playAnim()
  }, isAdding ? 120 : 60)
}
// start animation
playAnim()

И для префекционистов, которым не нравится курсор, мигающий, когда текст добавляется/удаляется, мы можем переключить анимацию Blink, удалив анимацию из:: после и добавив ее только в JS с Showanim учебный класс:

.typeText::after {
  content: "|";
  /* animation: blink 1s step-end infinite; */
  animation: none;
}

.showAnim.typeText::after {
  animation: blink 1s step-end infinite;
}

И переключать Showanim класс в JS:

function playAnim() {
    //...
      if (index > textToBeTyped.length) {
        // no more text to add
        isAdding = false
        //break: wait 2s before playing again
        // play cursor blink animation
        typeText.classList.add("showAnim")
        setTimeout(function () {
          // remove cursor blink animation
          typeText.classList.remove("showAnim")
          playAnim()
        }, 2000)
        return
    //...
}

Конец!

Оригинал: “https://dev.to/ljcdev/simple-typing-effect-pure-js-4p5m”