摧毁多个场景scrollmagic

时间:2016-03-28 11:22:50

标签: javascript angularjs memory-leaks scrollmagic dom-node

我在角度js应用中使用Scrollmagic。我的应用程序右侧有一个侧边栏,无限滚动。有些部分会坚持一段特定的时间,然后像下面那样展开

  • A部分进入视野并坚持
  • 对于几个像素,A部分仍然是粘性的,然后是unsticks
  • B部分出现并在几个像素后粘住
  • B部分对于几个像素仍然是粘性的,然后是unstick等等..

因此实际上我创建了多个场景并将其添加到scrollMagicController。我现在怀疑由于滚动保留DOM节点导致的内存泄漏,devtools的堆分析器证明了这一点。我知道有一个场景和控制器的破坏方法,需要调用它来清理,但我无法弄清楚如何破坏多个节点。以下是我试过的内容

var scrollMagicCtrl = new ScrollMagic.Controller();

//create scene dynamically whenever stickyContainerInView event fires
scope.$on('stickyContainerInView', function(event, inViewElement) {    
    new ScrollMagic.Scene({
            triggerElement: someElement, //Selector or DOM object that defines the start of the scene
            triggerHook: 'onLeave', //sets the position of trigger hook w.r.t viewport
            duration: someDuration, //The duration(in pixels) for which the element will remain sticky
            offset: -60 //Offset Value for the Trigger hook position
        })
        .setPin(someContainer)
        .addTo(scrollMagicCtrl);
});

//clean up things on angular's destroy method
$scope.$on("$destroy", function() {    
    scrollMagicCtrl.destroy();
    scrollMagicCtrl = null;
});

我想我只需要调用控制器的destroy方法,它应该自动销毁添加到它的所有场景,但不幸的是它不会那样工作。

堆分析器分离的DOM节点树的屏幕截图

有关如何清理事物的任何帮助?

0 个答案:

没有答案