JSFiddle - React, Tailwind, and code Playground

by avgustre

HTML

<script src="https://www.jqueryscript.net/demo/Number-Increment-Animations-with-jQuery-spincrement/jquery.spincrement.js"></script>
<div class="benefits">
  <div class="benefits__inner">
    <h1 class="benefits__header">
      О компании в цифрах
    </h1>
    <div class="benefits__element">
      <img class="benefits__icon" src="./img/workers.svg" alt="Сотрудники">
      <p class="benefits__number">10000</p>
      <p class="benefits__title">сотрудников по всему миру</p>
    </div>
    <div class="benefits__element">
      <img class="benefits__icon" src="./img/projects.svg" alt="Проекты">
      <p class="benefits__number">500</p>
      <p class="benefits__title">успешных проектов в год</p>
    </div>
    <div class="benefits__element">
      <img class="benefits__icon" src="./img/calendar.svg" alt="Опыт">
      <p class="benefits__number">15</p>
      <p class="benefits__title">лет в сфере разработки сайтов</p>
    </div>
  </div>
</div>

CSS

.benefits {
    width: 100%;
    background: #151d2d;
}
 
.benefits__inner {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    width: 100%;
    max-width: 1140px;
    margin: 0 auto;
    padding: 60px 0;
}
 
.benefits__header {
    width: 100%;
    text-align: center;
    line-height: 1.3;
    padding: 0 15px 60px;
    color: #e2e2e2;
    font-size: 2rem;
    text-transform: uppercase;
}
 
.benefits__element {
    width: 30%;
}
 
.benefits__icon {
    display: block;
    width: 60px;
    height: 50px;
    margin: 0 auto;
    margin-bottom: 20px;
}
 
.benefits__element p {
    color: #cdcdcd;
    text-align: center;
    line-height: 1.3;
}
 
.benefits__number {
    font-size: 2.5rem;
    font-weight: 700;
    margin-bottom: 20px
}
 
.benefits__title {
    font-size: 1.125rem;
}

JavaScript

var show = true;
    var countbox = ".benefits__inner";
    $(window).on("scroll load resize", function () {
        if (!show) return false; // Отменяем показ анимации, если она уже была выполнена
        var w_top = $(window).scrollTop(); // Количество пикселей на которое была прокручена страница
        var e_top = $(countbox).offset().top; // Расстояние от блока со счетчиками до верха всего документа
        var w_height = $(window).height(); // Высота окна браузера
        var d_height = $(document).height(); // Высота всего документа
        var e_height = $(countbox).outerHeight(); // Полная высота блока со счетчиками
        if (w_top + 500 >= e_top || w_height + w_top == d_height || e_height + e_top < w_height) {
            $('.benefits__number').css('opacity', '1');
            $('.benefits__number').spincrement({
                thousandSeparator: "",
                duration: 2000
            });

            show = false;
        }
    });