Files
owl/doc/reference/animations.md
T

96 lines
2.7 KiB
Markdown
Raw Normal View History

# 🦉 Animations 🦉
Animation is a complex topic. There are many different use cases, and many
2019-05-27 13:33:26 +02:00
solutions and technologies. Owl only supports some basic use cases.
## Simple CSS effects
2019-06-04 13:16:50 +02:00
Sometimes, using pure CSS is enough. For these use cases, Owl is not really
necessary: it just needs to render a DOM element with a specific class. For
example:
```xml
2019-05-27 13:33:26 +02:00
<a class="btn flash" t-on-click="doSomething">Click</a>
```
with the following CSS:
```css
2019-05-27 13:33:26 +02:00
btn {
2019-06-04 13:16:50 +02:00
background-color: gray;
2019-05-27 13:33:26 +02:00
}
.flash {
transition: background 0.5s;
}
.flash:active {
background-color: #41454a;
transition: background 0s;
}
```
2019-10-17 09:50:03 +02:00
will produce a nice flash effect whenever the user clicks (or activates with the
keyboard) the button.
2019-06-04 13:16:50 +02:00
## CSS Transitions
A more complex situation occurs when we want to transition an element in or out
2019-06-04 13:16:50 +02:00
of the page. For example, we may want a fade-in and fade-out effect.
2019-06-07 14:31:22 +02:00
The `t-transition` directive is here to help us. It works on html elements and
on components, by adding and removing some css classes.
2019-05-27 13:33:26 +02:00
2019-06-04 13:16:50 +02:00
To perform useful transition effects, whenever an element appears or disappears,
it is necessary to add/remove some css style or class at some precise moment in
the lifetime of a node. Since this is not easy to do by hand, Owl `t-transition`
directive is there to help.
Whenever a node has a `t-transition` directive, with a `name` value, the following
2019-10-17 09:50:03 +02:00
sequence of events will happen:
2019-06-04 13:16:50 +02:00
At node insertion:
- the css classes `name-enter` and `name-enter-active` will be added directly
when the node is inserted into the DOM,
- on the next animation frame: the css class `name-enter` will be removed and the
class `name-enter-to` will be added (so they can be used to trigger css
transition effects),
- the css class `name-enter-active` will be removed whenever a css transition
ends.
At node destruction:
- the css classes `name-leave` and `name-leave-active` will be added before the
node is removed to the DOM,
- the css class `name-leave` will be removed on the next animation frame (so it
can be used to trigger css transition effects),
- the css class `name-leave-active` will be removed whenever a css transition
ends. Only then will the element be removed from the DOM.
For example, a simple fade in/out effect can be done with this:
```xml
<div>
<div t-if="state.flag" class="square" t-transition="fade">Hello</div>
</div>
```
```css
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
```
The `t-transition` directive can be applied on a node element or on a component.
2019-06-04 13:16:50 +02:00
Notes:
2019-10-17 09:50:03 +02:00
Owl does not support more than one transition on a single node, so the
`t-transition` expression must be a single value (i.e. no space allowed).