Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Анимация чисел при прокрутке страницы (https://javascript.ru/forum/misc/60390-animaciya-chisel-pri-prokrutke-stranicy.html)

antonenkoab 04.01.2017 20:56

Спасибо за ответ и интересное решение!:thanks:
Но, нельзя ли даную задачу выполнить иначе, а именно изменив лишь код javascript?
А с помощью css, может, только задать числам горизонтальное расположение, а не вертикальное как сейчас, то есть расположить их в одну строку.

рони 04.01.2017 22:17

анимация чисел в зоне видимости jquery
 
antonenkoab,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
   .number{
    float:  left;
    width: 100px;
    font-size: 22px;
    line-height: 44px;
    color: #FFFFFF;
    background-color: #8B4513;
    text-align: center;
    margin-right: 30px;
   }
  p{
    height: 2000px;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    var num = $(".number");
    num.each(function(indx, el) {
        var max = $(el).data("max");
        var duration = 5000;
        var visibility = checkViewport(el);
        $(el).on("animeNum", function() {
            $({n: 0}).animate({n: max}, {
                easing: "linear",
                duration: duration,
                step: function(now, fx) {
                    $(el).html(now | 0)
                }
            })
        }).data("visibility", visibility);
        visibility && $(el).trigger("animeNum")
    });

    function checkViewport(el) {
    var H = document.documentElement.clientHeight,
        h = el.scrollHeight,
        pos = el.getBoundingClientRect();
        return pos.top + h > 0 && pos.bottom - h < H
    }
    $(window).scroll(function() {
        num.each(function(indx, el) {
            var visibility = checkViewport(el);
            el = $(el);
            var old = el.data("visibility");
            old != visibility && el.data("visibility", visibility) && !old && el.trigger("animeNum")
        })
    })
});
  </script>
</head>

<body>
<p></p>
<div class="number" data-max="3">0</div>
<div class="number" data-max="40">0</div>
<div class="number" data-max="400">0</div>
<p></p>
</body>
</html>

antonenkoab 05.01.2017 10:54

Здорово! Спасибо! :thanks: Наверное таки следует изучать jquery :) .
А, все-таки, для приверженцев писать код на чистом javascript, как такое повторить без использования библиотек на подобие jquery?

рони 05.01.2017 11:08

Цитата:

Сообщение от antonenkoab
А, все-таки, для приверженцев писать код на чистом javascript, как такое повторить без использования библиотек на подобие jquery?

вы наверно пост №10 не заметили :-/

antonenkoab 05.01.2017 11:20

Заметил. Я на пост №10 тоже писал комментарий. Извините, я наверное многого хочу.

рони 05.01.2017 12:00

antonenkoab,
чем пост №10 не устроил?

antonenkoab 05.01.2017 13:17

Цитата:

Сообщение от рони (Сообщение 439749)
antonenkoab,
чем пост №10 не устроил?

У меня никак не получается переделать код из поста №10 так, чтобы получился результат как в посте №12. Знаний и ума тут у меня не хватает, вот и надеюсь на доброго человека.


Часовой пояс GMT +3, время: 03:05.