From fffd9ffd64e8659d8096b8e9fdb7cefd9db8b2ab Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Tue, 18 Apr 2017 15:15:33 -0400 Subject: [PATCH] prevent timer proliferation --- src/generators/dom/visitors/Element/Binding.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/generators/dom/visitors/Element/Binding.js b/src/generators/dom/visitors/Element/Binding.js index 0850731907..5b24d3f3a4 100644 --- a/src/generators/dom/visitors/Element/Binding.js +++ b/src/generators/dom/visitors/Element/Binding.js @@ -83,8 +83,11 @@ export default function visitBinding ( generator, block, state, node, attribute block.builders.create.addBlock( `${block.component}._bindings.push( ${handler} );` ); if ( attribute.name === 'currentTime' ) { + const frame = block.getUniqueName( `${state.parentNode}_animationframe` ); + block.builders.create.addLine( `var ${frame};` ); setter = deindent` - if ( !${state.parentNode}.paused ) requestAnimationFrame( ${handler} ); + cancelAnimationFrame( ${frame} ); + if ( !${state.parentNode}.paused ) ${frame} = requestAnimationFrame( ${handler} ); ${setter} `; @@ -96,7 +99,7 @@ export default function visitBinding ( generator, block, state, node, attribute } else if ( attribute.name === 'paused' ) { - updateElement = `${state.parentNode}[ ${snippet} ? 'pause' : 'play' ]()`; + updateElement = `${state.parentNode}[ ${snippet} ? 'pause' : 'play' ]();`; } }