Как реализовать данный эффект?

Как при клике на кнопку сделать такую же анимацию появления цифр? Как такая анимация называется?


Ответы (1 шт):

Автор решения: ΝNL993

Лично мне это напомнило индикатор урона нанесённого врагу ?‍♂️

class DamageIndicator {
  static createIndicator(damage) {
    const indicator = document.createElement('div')
    indicator.className = 'indicator'
    indicator.textContent = String(damage)

    return indicator
  }

  static getSimilarNum(num) {
    return Math.random() * 10 * (Math.random() > 0.5 ? 1 : -1) + num
  }

  static initIndicator(indicator, x, y) {
    x = this.getSimilarNum(x)
    y = this.getSimilarNum(y)

    document.body.appendChild(indicator)
    indicator.style.left = String(x) + 'px'
    indicator.style.top = String(y) + 'px'
    indicator.style.opacity = '1'

    ;(function anim() {
      const opacity = Number(indicator.style.opacity) - 0.025

      indicator.style.left = String(x) + 'px'
      indicator.style.top = String(y) + 'px'
      indicator.style.opacity = String(opacity)

      if (opacity > 0) {
        requestAnimationFrame(anim)
        y += -1
      } else {
        return indicator.remove()
      }
    })()
  }
}

const box = document.querySelector('.box')

box.addEventListener('click', ev => {
  const { pageX, pageY } = ev
  const indicator = DamageIndicator.createIndicator(9)

  DamageIndicator.initIndicator(indicator, pageX, pageY)
})
@import url(//fonts.googleapis.com/css?family=Rubik+Mono+One);

body {
  background-color: rgb(11, 12, 14);
}

.box {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  background-color: red;
  width: 100px;
  height: 100px;
}

.indicator {
  color: rgb(255, 255, 255);
  position: absolute;
  font-family: 'Rubik Mono One', 'Segoe UI', Arial, sans-serif;
  pointer-events: none;
}
<div class="box"></div>

  • createIndicator

В этой функции ничего такого, базовое создание элемента.

  • getSimilarNum

Эта функция возвращает число, которое очень близко к числу введённому в аргументы. Math.random() * 10 - число между 0 и 10. Далее это число умножается либо на -1, либо на 1 (то-есть остаётся как есть), шансы 50 на 50 и это всё плюсуется к введённому числу.

  • initIndicator

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

→ Ссылка