当用户滚动并到达div时,使数字具有动画效果

时间:2018-03-13 15:33:08

标签: javascript jquery html jquery-animate counter

我有一个简单的jQuery代码,完美运行(我想保留)。问题是此动画位于页面下方的一个部分中,并在页面加载时开始运行。我需要这个动画(数字从0开始并运行直到我放入div中的数字)才会发生,只有当用户滚动并到达该div时。我搜索谷歌和这里的StackOverflow,但我发现的解决方案不起作用或需要一个插件(我不想使用)。

这是我到目前为止的演示代码: https://jsfiddle.net/aj7Lk2bw/2/

jQuery是:

    $('.value').each(function () {
    $(this).prop('Counter',0).animate({
        Counter: $(this).text()
    }, {
        duration: 4000,
        easing: 'swing',
        step: function (now) {
            $(this).text(Math.ceil(now));
        }
    });
});

2 个答案:

答案 0 :(得分:1)

看看这是否是你想要的:https://jsfiddle.net/aj7Lk2bw/19/

$(window).scroll(testScroll);
var viewed = false;

function isScrolledIntoView(elem) {
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();

    return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}

function testScroll() {
  if (isScrolledIntoView($(".numbers")) && !viewed) {
      viewed = true;
      $('.value').each(function () {
      $(this).prop('Counter',0).animate({
          Counter: $(this).text()
      }, {
          duration: 4000,
          easing: 'swing',
          step: function (now) {
              $(this).text(Math.ceil(now));
          }
      });
    });
  }
}

在这里找到了这样做的方法:Run script when div is visible in browser window

答案 1 :(得分:0)

这是一个可能的解决方案:

var section = document.querySelector('.numbers');
var hasEntered = false;

window.addEventListener('scroll', (e) => {
    var shouldAnimate = (window.scrollY + window.innerHeight) >= section.offsetTop;

    if (shouldAnimate && !hasEntered) {
    hasEntered = true;

    $('.value').each(function () {
        $(this).prop('Counter',0).animate({
        Counter: $(this).text()
        }, {
        duration: 4000,
        easing: 'swing',
        step: function (now) {
            $(this).text(Math.ceil(now));
        }
        });
    });

  }
});

变量section是带有数字的蓝色部分,hasEntered是不重复动画。

如果窗口滚动高于剖面位置,则会生成动画!

小提琴:https://jsfiddle.net/aj7Lk2bw/18/