easing.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. *
  6. * adapted from https://github.com/d3/d3-ease
  7. */
  8. const b1 = 4 / 11,
  9. b2 = 6 / 11,
  10. b3 = 8 / 11,
  11. b4 = 3 / 4,
  12. b5 = 9 / 11,
  13. b6 = 10 / 11,
  14. b7 = 15 / 16,
  15. b8 = 21 / 22,
  16. b9 = 63 / 64,
  17. b0 = 1 / b1 / b1;
  18. export function bounceIn(t: number) {
  19. return 1 - bounceOut(1 - t);
  20. }
  21. export function bounceOut(t: number) {
  22. return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
  23. }
  24. export function bounceInOut(t: number) {
  25. return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
  26. }
  27. //
  28. export function circleIn(t: number) {
  29. return 1 - Math.sqrt(1 - t * t);
  30. }
  31. export function circleOut(t: number) {
  32. return Math.sqrt(1 - --t * t);
  33. }
  34. export function circleInOut(t: number) {
  35. return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
  36. }
  37. //
  38. export function cubicIn(t: number) {
  39. return t * t * t;
  40. }
  41. export function cubicOut(t: number) {
  42. return --t * t * t + 1;
  43. }
  44. export function cubicInOut(t: number) {
  45. return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
  46. }
  47. //
  48. export function expIn(t: number) {
  49. return Math.pow(2, 10 * t - 10);
  50. }
  51. export function expOut(t: number) {
  52. return 1 - Math.pow(2, -10 * t);
  53. }
  54. export function expInOut(t: number) {
  55. return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
  56. }
  57. //
  58. export function quadIn(t: number) {
  59. return t * t;
  60. }
  61. export function quadOut(t: number) {
  62. return t * (2 - t);
  63. }
  64. export function quadInOut(t: number) {
  65. return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
  66. }
  67. //
  68. const pi = Math.PI,
  69. halfPi = pi / 2;
  70. export function sinIn(t: number) {
  71. return 1 - Math.cos(t * halfPi);
  72. }
  73. export function sinOut(t: number) {
  74. return Math.sin(t * halfPi);
  75. }
  76. export function sinInOut(t: number) {
  77. return (1 - Math.cos(pi * t)) / 2;
  78. }
  79. //