@tamagui/react-native-web-lite
Version:
React Native for Web
53 lines (52 loc) • 3.21 kB
JavaScript
import Easing from "../Easing.mjs";
import { shouldUseNativeDriver } from "../NativeAnimatedHelper.mjs";
import Animation from "./Animation.mjs";
var _easeInOut;
function easeInOut() {
return _easeInOut || (_easeInOut = Easing.inOut(Easing.ease)), _easeInOut;
}
class TimingAnimation extends Animation {
constructor(config) {
var _config$easing, _config$duration, _config$delay, _config$iterations, _config$isInteraction;
super(), this._toValue = config.toValue, this._easing = (_config$easing = config.easing) !== null && _config$easing !== void 0 ? _config$easing : easeInOut(), this._duration = (_config$duration = config.duration) !== null && _config$duration !== void 0 ? _config$duration : 500, this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0, this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1, this._useNativeDriver = shouldUseNativeDriver(config), this._platformConfig = config.platformConfig, this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;
}
__getNativeAnimationConfig() {
for (var frameDuration = 16.666666666666668, frames = [], numFrames = Math.round(this._duration / frameDuration), frame = 0; frame < numFrames; frame++) frames.push(this._easing(frame / numFrames));
return frames.push(this._easing(1)), {
type: "frames",
frames,
toValue: this._toValue,
iterations: this.__iterations,
platformConfig: this._platformConfig
};
}
start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {
this.__active = !0, this._fromValue = fromValue, this._onUpdate = onUpdate, this.__onEnd = onEnd;
var start = () => {
this._duration === 0 && !this._useNativeDriver ? (this._onUpdate(this._toValue), this.__debouncedOnEnd({
finished: !0
})) : (this._startTime = Date.now(), this._useNativeDriver ? this.__startNativeAnimation(animatedValue) : this._animationFrame = requestAnimationFrame(
// $FlowFixMe[method-unbinding] added when improving typing for this parameters
this.onUpdate.bind(this)));
};
this._delay ? this._timeout = setTimeout(start, this._delay) : start();
}
onUpdate() {
var now = Date.now();
if (now >= this._startTime + this._duration) {
this._duration === 0 ? this._onUpdate(this._toValue) : this._onUpdate(this._fromValue + this._easing(1) * (this._toValue - this._fromValue)), this.__debouncedOnEnd({
finished: !0
});
return;
}
this._onUpdate(this._fromValue + this._easing((now - this._startTime) / this._duration) * (this._toValue - this._fromValue)), this.__active && (this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this)));
}
stop() {
super.stop(), this.__active = !1, clearTimeout(this._timeout), global.cancelAnimationFrame(this._animationFrame), this.__debouncedOnEnd({
finished: !1
});
}
}
var TimingAnimation_default = TimingAnimation;
export { TimingAnimation_default as default };
//# sourceMappingURL=TimingAnimation.mjs.map