UNPKG

animated

Version:

Declarative Animations Library for React and React Native

83 lines (45 loc) 3.01 kB
'use strict';var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return call&&(typeof call==="object"||typeof call==="function")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;} var Animation=require('./Animation'); var RequestAnimationFrame=require('./injectable/RequestAnimationFrame'); var CancelAnimationFrame=require('./injectable/CancelAnimationFrame');var DecayAnimation=function(_Animation){_inherits(DecayAnimation,_Animation); function DecayAnimation( config) {_classCallCheck(this,DecayAnimation);var _this=_possibleConstructorReturn(this,(DecayAnimation.__proto__||Object.getPrototypeOf(DecayAnimation)).call(this)); _this._deceleration=config.deceleration!==undefined?config.deceleration:0.998; _this._velocity=config.velocity; _this.__isInteraction=config.isInteraction!==undefined?config.isInteraction:true;return _this; }_createClass(DecayAnimation,[{key:'start',value:function start( fromValue, onUpdate, onEnd) { this.__active=true; this._lastValue=fromValue; this._fromValue=fromValue; this._onUpdate=onUpdate; this.__onEnd=onEnd; this._startTime=Date.now(); this._animationFrame=RequestAnimationFrame.current(this.onUpdate.bind(this)); }},{key:'onUpdate',value:function onUpdate() { var now=Date.now(); var value=this._fromValue+ this._velocity/(1-this._deceleration)*( 1-Math.exp(-(1-this._deceleration)*(now-this._startTime))); this._onUpdate(value); if(Math.abs(this._lastValue-value)<0.1){ this.__debouncedOnEnd({finished:true}); return; } this._lastValue=value; if(this.__active){ this._animationFrame=RequestAnimationFrame.current(this.onUpdate.bind(this)); } }},{key:'stop',value:function stop() { this.__active=false; CancelAnimationFrame.current(this._animationFrame); this.__debouncedOnEnd({finished:false}); }}]);return DecayAnimation;}(Animation); module.exports=DecayAnimation;