mirror of https://github.com/sveltejs/svelte
27 lines
677 B
27 lines
677 B
---
|
|
title: Custom JS transitions
|
|
---
|
|
|
|
While you should generally use CSS for transitions as much as possible, there are some effects that can't be achieved without JavaScript, such as a typewriter effect:
|
|
|
|
```js
|
|
function typewriter(node, { speed = 1 }) {
|
|
const valid = node.childNodes.length === 1 && node.childNodes[0].nodeType === Node.TEXT_NODE;
|
|
|
|
if (!valid) {
|
|
throw new Error(`This transition only works on elements with a single text node child`);
|
|
}
|
|
|
|
const text = node.textContent;
|
|
const duration = text.length / (speed * 0.01);
|
|
|
|
return {
|
|
duration,
|
|
tick: (t) => {
|
|
const i = Math.trunc(text.length * t);
|
|
node.textContent = text.slice(0, i);
|
|
}
|
|
};
|
|
}
|
|
```
|