Simple animation easing functions
Find a file
2021-12-09 11:12:14 +13:00
config chore: set up git_ops and auto-releasing 2020-12-28 20:13:12 +13:00
lib Limit accuracy in tests to allow them to pass cross-platform. 2018-09-04 22:25:57 +12:00
test Initial release. 2017-02-17 11:40:56 +13:00
.formatter.exs Update dependencies and add CI setup. 2018-09-04 21:45:10 +12:00
.gitignore Initial release. 2017-02-17 11:40:56 +13:00
.gitlab-ci.yml chore: Change default branch to main. 2021-12-08 16:30:32 +13:00
CHANGELOG.md chore: set up git_ops and auto-releasing 2020-12-28 20:13:12 +13:00
LICENSE.md Update MIT license file 2019-03-04 15:05:39 +13:00
mix.exs chore: allow mix docs to run in test. 2020-12-28 20:20:20 +13:00
mix.lock chore(dev-deps): Update git_ops to 2.4.5. 2021-12-08 16:47:56 +13:00
README.md chore: set up git_ops and auto-releasing 2020-12-28 20:13:12 +13:00
renovate.json chore: update renovate.json 2021-12-09 11:12:14 +13:00

Ease

A generic implementation of standard easing functions for use in animation or robotics.

For examples of "standard" easing algorithms (in this case used in CSS animations) take a look at easings.net

Installation

Available in Hex, the package can be installed by adding ease to your list of dependencies in mix.exs:

def deps do
  [{:ease, "~> 0.2.0"}]
end

Documentation can be found at https://hexdocs.pm/ease.

Usage

You can use an easing function directly from within your own loop, provided that you can supply the four arguments needed;

  • current_time - the elapsed "time" in the loop, ie if your duration is ten, and you want to find the position for half way through the duration then you set it to 5. Units are arbitrary (steps, ms, whatever).
  • start_value - the initial value or position at current_time of zero.
  • change_in_value- how much the start_value should be changed by the end of the animation, ie the expected final value minus the start_value.
  • duration - the duration of the animation, in the same units as current_time.

Given a quadratic ease-in of 1..10, over 1 unit of time, where would we be when half-way through:

iex> Ease.ease_in_quad(0.5, 1, 10, 1)
3.25

Plot the {x, y} positions for a circular ease-in:

iex> ys = 1..10
...> xs = Ease.map(ys, :ease_in_circular)
...> Enum.zip(xs, ys)
[{1.0, 1}, {1.0557280900008417, 2}, {1.2250356126078779, 3},
 {1.5147186257614298, 4}, {1.9377422517014504, 5}, {2.5166852264521173, 6},
 {3.291796067500631, 7}, {4.34314575050762, 8}, {5.876894374382339, 9},
 {10.0, 10}]

License

Source code is licensed under the terms of the MIT license, the text of which is included in the LICENSE file in this distribution.