Как вызвать функцию при прокрутке

У меня есть несколько анимаций, которые я хочу активировать, когда прокручиваю определенную точку на странице.

Я не думаю, что у меня есть правильный синтаксис для вызова моей функции анимации со свойством scrollTop. Я проверил это с предупреждением, и он работал нормально.

var illustArr = ['map', 'privacy', 'payment', 'rewards', 'security', 'passcode'];
var illust;

function addListenerToElement(e, anim){
    document.getElementById(e).addEventListener('mousedown', function() {
    anim.play();
    anim.addEventListener('complete', function(){anim.goToAndStop(0,true)});
  }
)};

function buildIllus(){
for(var i=0;i<illustArr.length;i+=1){
    illust = document.getElementById(illustArr[i]);
    var params = {
        container: illust,
        autoplay: false,
        loop: false,
        animationData: animations[illustArr[i]],
        renderer: 'svg'
    };

    var anim = bodymovin.loadAnimation(params);

    illustArr.forEach(function (e) {
      addListenerToElement(e, anim)
      })
}
};

window.onscroll = function() {myFunction()};

function myFunction() {
if (document.body.scrollTop > 50) {
    anim.play
}}

buildIllus();

Спасибо

2 ответа

Я знаю, что это довольно старая тема, но у меня была та же проблема, и я не мог найти ответ нигде. Я решил эту проблему благодаря вашему примеру, поэтому решил поделиться ответом. Может быть, это будет полезно кому-то, кто ищет то же самое!

Во-первых, я предположил, что анимации в HTML имеют один и тот же класс, но имеют разные идентификаторы - я сделал так, чтобы идентификатор совпадал с именем файла анимации (т.е. animations/privacy.json, идентификатор DOM "privacy", имя анимации "privacy").

О, и я использовал Лотти, но это то же самое, что и Бодимовин.

HTML:

<div class="animation" id="privacy">

JS:

var animationsArray = ['map', 'privacy', 'payment', 'rewards', 'security', 'passcode'];
    var anims;

    function buildAnimations(){
        for(var i=0; i<animationsArray.length; i++) {
            anims = document.getElementById(animationsArray[i]);
            var animationPath = "animations/" + animationsArray[i] +  ".json";
            var parameters = {
                container: anims,
                renderer: 'svg',
                loop: false,
                autoplay: false,
                path: animationPath,
                name: animationsArray[i]
            };

            var anim = lottie.loadAnimation(parameters);
        }
    }

    var animationPosition = function() {
        var winTop = $(window).scrollTop(),
        pageAnimation = $('.animation');

        pageAnimation.each(function(index) {
            var animationID = $(this).attr('id');

            if($(this).offset().top <= (winTop + 450)) {
                lottie.play(animationID);
            }
        });
    };

    buildAnimations();
    window.addEventListener('scroll', animationPosition);

Может измениться anim.play в anim.play()?

function myFunction() {
    if (document.body.scrollTop > 50) {
        anim.play(); // this line
    }
}
Другие вопросы по тегам