如何修复脚本?

时间:2016-04-26 06:28:36

标签: javascript scroll scrollmagic

https://jsfiddle.net/fnethLxm/10/

$(document).ready(function() {
    parallaxAuto()
});
function parallaxAuto() {
    var viewer       = document.querySelector('.viewer.active'),
    frame_count  = 5,
    offset_value = 500;

    // init controller
    var controller = new ScrollMagic.Controller({
      globalSceneOptions: {
        triggerHook: 0,
        reverse: true
      }
    });

    // build pinned scene
    var scene = new ScrollMagic.Scene({
      triggerElement: '#sticky',
      duration: (frame_count * offset_value) + 'px',
      reverse: true
    })
    .setPin('#sticky')
    //.addIndicators()
    .addTo(controller);

    // build step frame scene
    for (var i = 1, l = frame_count; i <= l; i++) {
      new ScrollMagic.Scene({
          triggerElement: '#sticky',
          offset: i * offset_value
        })
        .setClassToggle(viewer, 'frame' + i)
        //.addIndicators()
        .addTo(controller);
    }

    $(".right_arrr").click(function(){
        var block = $(this).siblings('.secondSlider');
        el = block.find(".active");
        elNum = el.attr("data-num");
        if(elNum < block.find('.slide').length) {
            elNum++;
        } else {
            elNum=1;
        }
        hideShow(elNum, block);
        alert('slide №' + elNum)
        scene = scene.destroy(true);
        scene = null;
        controller.destroy(true);
        controller = null;
        parallaxAuto();
    });
    $(".left_arrr").click(function(){
        var block = $(this).siblings('.secondSlider');
        el = block.find(".active");
        elNum = el.attr("data-num");
        if(elNum > 1) {
            elNum--;
        } else {
            elNum=block.find('.slide').length;
        }
        hideShow(elNum, block);
        scene = scene.destroy(true);
        scene = null;
        controller.destroy(true);
        controller = null;
        parallaxAuto();
    });
    function hideShow(num, block) {
        block.find("div.active").removeClass("active").animate({ opacity: 0,},300);
        block.find("div.slide"+num).addClass("active").animate({ opacity: 1,},300);
    }
};

你可以看到1和2幻灯片插件工作正常,但在幻灯片3上它不起作用。和错误&#34;无法阅读财产&#39;销毁&#39; of null&#34; 我坐了几天,我无法理解 如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我看到2个问题:

  • 您在每次向右/向左点击时将场景和控制器设置为null,并需要重新启动它,然后重新调用parallaxAuto;
  • 每次调用parallaxAuto时,都会重新绑定侦听器。

我冒昧地为你重写它,所以听众只会被绑定一次:https://jsfiddle.net/j6u6wp7x/。我刚刚隔离了你重新启动控制器和场景的部分,这样你就可以在点击结束时调用它,而不需要重新绑定事件。