addimated
Version:
An always interruptable, declarative animation library for React
106 lines (84 loc) • 3.65 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TimingAnimation = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _invariant = _interopRequireDefault(require("invariant"));
var _warning = _interopRequireDefault(require("warning"));
var _Animation2 = require("./Animation");
var Easing = _interopRequireWildcard(require("./Easing"));
var _WithDefault = require("./WithDefault");
var easeInOut = Easing.inOut(Easing.ease);
var TimingAnimation =
/*#__PURE__*/
function (_Animation) {
(0, _inherits2.default)(TimingAnimation, _Animation);
function TimingAnimation(config) {
var _this;
(0, _classCallCheck2.default)(this, TimingAnimation);
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(TimingAnimation).call(this));
_this.startTime = null;
_this.currentTime = null;
_this.toValue = config.toValue;
_this.easing = (0, _WithDefault.withDefault)(config.easing, easeInOut);
_this.duration = (0, _WithDefault.withDefault)(config.duration, 500);
_this.delay = (0, _WithDefault.withDefault)(config.delay, 0);
return _this;
}
(0, _createClass2.default)(TimingAnimation, [{
key: "start",
value: function start(animatedVal, fromValue, onEnd) {
animatedVal.model = this.toValue;
this.active = true;
this.fromValue = fromValue - this.toValue;
this.toValue = 0;
this.endCallback = onEnd;
this.currentTime = performance.now();
this.startTime = this.currentTime + this.delay;
return animatedVal.animations.concat(this);
}
}, {
key: "step",
value: function step(timestamp) {
var startTime = this.startTime;
process.env.NODE_ENV !== "production" ? (0, _warning.default)(startTime != null, "Attempted to step an animation which hasn't started") : void 0;
if (!this.ended && timestamp >= startTime + this.duration) {
this.stop(true);
}
this.currentTime = timestamp;
}
}, {
key: "getValue",
value: function getValue() {
var toValue = this.toValue;
var fromValue = this.fromValue;
var currentTime = this.currentTime;
var startTime = this.startTime;
!(currentTime && startTime) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "Attempted to get the value of an animation which hasn't started") : invariant(false) : void 0;
if (currentTime <= startTime) {
return fromValue;
} else {
return fromValue + this.easing((currentTime - startTime) / this.duration) * (toValue - fromValue);
}
}
}, {
key: "stop",
value: function stop() {
var finished = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
this.ended = true;
this.endCallback && this.endCallback({
finished: finished
});
}
}]);
return TimingAnimation;
}(_Animation2.Animation);
exports.TimingAnimation = TimingAnimation;
//# sourceMappingURL=TimingAnimation.js.map