UNPKG

@amcharts/amcharts4

Version:
313 lines 9.53 kB
/** * A collection of easing functions * * Parts of this collection are taken from D3.js library (https://d3js.org/) */ /** * ============================================================================ * IMPORTS * ============================================================================ * @hidden */ import * as $math from "../utils/Math"; import { registry } from "../Registry"; /** * The functions below are from D3.js library (https://d3js.org/) * * ---------------------------------------------------------------------------- * Copyright 2017 Mike Bostock * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- * @hidden */ /** * ============================================================================ * LINEAR FUNCTIONS * ============================================================================ * @hidden */ /** * Easing function: "linear". */ export function linear(t) { return +t; } registry.registeredClasses["ease.linear"] = linear; /** * Easing function: "quadIn". */ export function quadIn(t) { return t * t; } registry.registeredClasses["ease.quadIn"] = quadIn; /** * Easing function: "quadOut". */ export function quadOut(t) { return t * (2 - t); } registry.registeredClasses["ease.quadOut"] = quadOut; /** * Easing function: "quadInOut". */ export function quadInOut(t) { t *= 2; return (t <= 1 ? t * t : --t * (2 - t) + 1) / 2; } registry.registeredClasses["ease.quadInOut"] = quadInOut; /** * Easing function: "polyIn". */ export function polyIn(t, e) { return Math.pow(t, e); } registry.registeredClasses["ease.polyIn"] = polyIn; /** * Easing function: "polyOut". */ export function polyOut(t, e) { return 1 - Math.pow(1 - t, e); } registry.registeredClasses["ease.polyOut"] = polyOut; /** * Easing function: "polyInOut". */ export function polyInOut(t, e) { t *= 2; return (t <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; } registry.registeredClasses["ease.polyInOut"] = polyInOut; /** * Easing function: "polyIn3". */ export function polyIn3(t) { return polyIn(t, 3); } registry.registeredClasses["ease.polyIn3"] = polyIn3; /** * Easing function: "polyOut3". */ export function polyOut3(t) { return polyOut(t, 3); } registry.registeredClasses["ease.polyOut3"] = polyOut3; /** * Easing function: "polyInOut3". */ export function polyInOut3(t) { return polyInOut(t, 3); } registry.registeredClasses["ease.polyInOut3"] = polyInOut3; /** * ============================================================================ * EXPONENTIAL FUNCTIONS * ============================================================================ * @hidden */ /** * Easing function: "expIn". */ export function expIn(t) { return Math.pow(2, 10 * t - 10); } registry.registeredClasses["ease.expIn"] = expIn; /** * Easing function: "expOut". */ export function expOut(t) { return 1 - Math.pow(2, -10 * t); } registry.registeredClasses["ease.expOut"] = expOut; /** * Easing function: "expInOut". */ export function expInOut(t) { t *= 2; return (t <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; } registry.registeredClasses["ease.expInOut"] = expInOut; /** * ============================================================================ * SINE FUNCTIONS * ============================================================================ * @hidden */ /** * Easing function: "sinIn". */ export function sinIn(t) { return 1 - Math.cos(t * $math.HALFPI); } registry.registeredClasses["ease.sinIn"] = sinIn; /** * Easing function: "sinOut". */ export function sinOut(t) { return Math.sin(t * $math.HALFPI); } registry.registeredClasses["ease.sinOut"] = sinOut; /** * Easing function: "sinInOut". */ export function sinInOut(t) { return (1 - Math.cos($math.PI * t)) / 2; } registry.registeredClasses["ease.sinInOut"] = sinInOut; /** * ============================================================================ * CUBIC FUNCTIONS * ============================================================================ * @hidden */ /** * Easing function: "cubicIn". */ export function cubicIn(t) { return t * t * t; } registry.registeredClasses["ease.cubicIn"] = cubicIn; /** * Easing function: "cubicOut". */ export function cubicOut(t) { return --t * t * t + 1; } registry.registeredClasses["ease.cubicOut"] = cubicOut; /** * Easing function: "cubicInOut". */ export function cubicInOut(t) { t *= 2; return (t <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; } registry.registeredClasses["ease.cubicInOut"] = cubicInOut; /** * ============================================================================ * CIRCLE FUNCTIONS * ============================================================================ * @hidden */ /** * Easing function: "circleIn". */ export function circleIn(t) { return 1 - Math.sqrt(1 - t * t); } registry.registeredClasses["ease.circleIn"] = circleIn; /** * Easing function: "circleOut". */ export function circleOut(t) { return Math.sqrt(1 - --t * t); } registry.registeredClasses["ease.circleOut"] = circleOut; /** * Easing function: "circleInOut". */ export function circleInOut(t) { t *= 2; return (t <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; } registry.registeredClasses["ease.circleInOut"] = circleInOut; /** * ============================================================================ * BOUNCE FUNCTIONS * ============================================================================ * @hidden */ var b1 = 4 / 11, b2 = 6 / 11, b3 = 8 / 11, b4 = 3 / 4, b5 = 9 / 11, b6 = 10 / 11, b7 = 15 / 16, b8 = 21 / 22, b9 = 63 / 64, b0 = 1 / b1 / b1; /** * Easing function: "bounceIn". */ export function bounceIn(t) { return 1 - bounceOut(1 - t); } registry.registeredClasses["ease.bounceIn"] = bounceIn; /** * Easing function: "bounceOut". */ export function bounceOut(t) { t = +t; return t < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; } registry.registeredClasses["ease.bounceOut"] = bounceOut; /** * Easing function: "bounceInOut". */ export function bounceInOut(t) { t *= 2; return (t <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; } registry.registeredClasses["ease.bounceInOut"] = bounceInOut; /** * ============================================================================ * ELASTIC FUNCTIONS * ============================================================================ * @hidden */ var tau = 2 * Math.PI; var amplitude = 1; var period = 0.3 / tau; var s = Math.asin(1 / amplitude) * period; /** * Easing function: "elasticIn". * * @function elasticIn * @param a Amplitude * @param p period */ export function elasticIn(t) { return amplitude * Math.pow(2, 10 * --t) * Math.sin((s - t) / period); } registry.registeredClasses["ease.elasticIn"] = elasticIn; /** * Easing function: "elasticOut". * * @function elasticOut * @param a Amplitude * @param p period */ export function elasticOut(t) { return 1 - amplitude * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / period); } registry.registeredClasses["ease.elasticOut"] = elasticOut; /** * Easing function: "elasticInOut". * * @function elasticInOut * @param a Amplitude * @param p period */ export function elasticInOut(t) { t = t * 2 - 1; return (t < 0 ? amplitude * Math.pow(2, 10 * t) * Math.sin((s - t) / period) : 2 - amplitude * Math.pow(2, -10 * t) * Math.sin((s + t) / period)) / 2; } registry.registeredClasses["ease.elasticInOut"] = elasticInOut; //# sourceMappingURL=Ease.js.map