Home

Awesome

<h1><img src="https://github.com/benvp/live_motion/raw/main/static/images/logo.png" alt="🍿 LiveMotion" width="400"></h1>

LiveMotion enables high performance animations declared on the server and run on the client.

Documentation

You can find the full API documentation on hexdocs.pm/live_motion.

Additionally you can find a few examples here: LiveMotion Examples.

Features

Installation

LiveMotion makes use of Phoenix LiveView hooks and therefore the setup requires a few more steps than just adding the dependency to the Mixfile. However, the JS part is included and works without node installed.

Add the live_motion dependency to your mix.exs file.

def deps do
  [
    {:live_motion, "~> 0.3"}
  ]
end

Open up your app.js and import createLiveMotion and initialize LiveMotion.

import { createLiveMotion } from 'live_motion';

const { hook: motionHook, handleMotionUpdates } = createLiveMotion();

Now in your hook definition, add the LiveMotion hook.

const hooks = {
  // your other hooks
  // ...
  ...motionHook,
};

Finally, we need to make sure that LiveView does not overwrite the style attributes generated by LiveMotion. In your LiveSocket initialization, add the following function into onBeforeElUpdated(from, to).

let liveSocket = new LiveSocket('/live', Socket, {
  params: { _csrf_token: csrfToken },
  hooks,
  dom: {
    onBeforeElUpdated(from, to) {
      // add this line
      handleMotionUpdates(from, to);
    },
  },
});

If you are using node and have npm or yarn installed, one additional step is required.

<details> <summary>Show Instructions for npm / yarn</summary>

We need to add the JS part as a dependency to our package.json file. Add this to your package.json file.

{
  "dependencies": {
    "live_motion": "file:../deps/live_motion"
  }
}

Don't forget to run npm install or yarn afterwards.

</details>

Roadmap

There are still a lot of things to do to get to a mature library.

Limitations

LiveMotion is still in the early days, so breaking changes are expected. Additionally, there are still a few limitations, which will be added in future releases.

Contributing

Any contribution is very much welcome. The project itself works just as any other mix project.

Please do not include an updated priv/static/live_motion.js in pull requests. The maintainers will update it as part of the release process.