Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/neolegends/dom-flip

🔀 Smooth position animation for web components.
https://github.com/neolegends/dom-flip

animation flip-animation list magic-move web-component

Last synced: about 1 month ago
JSON representation

🔀 Smooth position animation for web components.

Awesome Lists containing this project

README

        

# \

[![Build Status](https://travis-ci.org/NeoLegends/dom-flip.svg?branch=master)](https://travis-ci.org/NeoLegends/dom-flip)
[![Greenkeeper badge](https://badges.greenkeeper.io/NeoLegends/dom-flip.svg)](https://greenkeeper.io/)
[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/NeoLegends/dom-flip)

🔀 Smooth position animation for web components.

[Demo](https://neolegends.github.io/dom-flip/)

This element is an implementation of the [FLIP-technique](https://aerotwist.com/blog/flip-your-animations/) for arbitrary elements. Simply place it around the elements you indend to reorder and they will smoothly slide over the screen when moved.



## Installation
This element lives on npm. Install with `yarn add dom-flip` or `npm install --save dom-flip`.

## Usage
You can use this element together with any element that modifies the DOM. The animated elements must be direct children of the `dom-flip` element.

To be able to correlate changes in the model to changes to the DOM, this element requires that you give every element a unique ID. This must be an attribute on the element itself and cannot be a property (because properties cannot be observed via MutationObserver).

### Polymer's dom-repeat:
```html




[[item.name]]

```

### lit-html:
```ts
const template = (items: { id: string, name: string }[]) => html`

${items.map(item => html`

${item.name}
`)}

`;

// Render some items
const result = template([
{ id: "1", name: "Hello" },
{ id: "2", name: ", " },
{ id: "3", name: "World!" }
]);
render(result, renderNode);

// ... next animation frame

// Change their order
const result = template([
{ id: "1", name: "Hello" },
{ id: "3", name: "World!" },
{ id: "2", name: ", " }
]);

// Positions are animated and the items will smoothly glide to their new place
render(result, renderNode);
```

### iron-list
Although we wish it did, this element will not work with `` due to the virtualization. Maybe this can be fixed in the future.

### Automatic registration
You can import the custom element class from `dom-flip/element` if you don't want it to automatically be registered within the custom elements registry.

## Performance
The element is designed to avoid layout thrashing as much as possible by batching work into microtasks and to animation frame timing.

## License
MIT