2017-10-14 84 views
0

我有两个控制器。一个名为page1的页面和另一个名为page2的页面。在页面1我有一个运行动画的代码。我有一个无限调用自己的函数。在这一行。当我访问另一个状态时停止功能

.each('end',tick)当动画结束时,它再次开始tick()。

function tick(){ 
console.log("hello"); 
. 
. 
. 
//line 190 
paths.attr('transform', null) 
.transition() 
.duration(duration) 
.ease('linear') 
.attr('transform', 'translate(' + x(now - (limit - 1) * duration) + ')') 
.each('end', tick) //when the transition ends, it start tick() again 
} 

这很好,因为它是一个无限的动画。我在tick函数中放了console.log(“hello”),然后每次执行这个函数时,单词“hello”被写入控制台。到现在为止还挺好 !。当我改变控制器的时候,即当我点击去第2页时,我以前的动画仍在运行,我仍然可以看到第一个控制器中的函数的console.log(“hello”)。

当我更换控制器时,如何停止此功能?

这是我的代码:

http://plnkr.co/edit/66cK7gWTNQNh4vmC2lmp?p=preview

+0

是有一些条件可以在调用'tick()'之前检查?例如,'.each('end',function(){if(condition){tick();}})' – Nick

+0

@snapjs任何情况都没关系 – unusuario

+0

@aaron是的,但它不适用于我。我有一个错误.. – unusuario

回答

1

监听范围受到破坏,停止你的动画循环:

function MyController($scope) { 
    var animating = true; 
    $scope.$on('$destroy', function() { 
    animating = false; 
    }); 

    function tick() { 
    if (!animating) return; 
    console.log("hello"); 
    } 
} 

阅读关于角的范围$destroy事件在这里:https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy

+0

朋友我试过这个,但它对我不起作用。实际上它会导致我犯错误。 $ scope.on不是一个函数。是摧毁。谢谢! – unusuario

+0

@unusuario拍下即时对不起,其$'on'不是'on',我很抱歉。给出最新的答案。 –

+0

mmm。我试过了,但没有任何反应.. http://plnkr.co/edit/2m97RvcUSQoqcqQOxgc4?p=preview这会杀死我的图表的功能 – unusuario

相关问题