Nuxt 使用
如果你正在使用 Nuxt,这个包有一个特定的实现,可以使自定义指令的声明更加容易。
它与 @vueuse/motion 一起发布,并且可以通过 @vueuse/motion/nuxt 导入。
它应该可以与 nuxt3 和 @nuxt/bridge 一起工作。
安装
将 @vueuse/motion/nuxt 添加到 nuxt.config.js 的 modules 部分
{
// nuxt.config.js
modules: ['@vueuse/motion/nuxt']
}
然后,配置你的动画 🤹
{
// nuxt.config.js
runtimeConfig: {
public: {
motion: {
directives: {
'pop-bottom': {
initial: {
scale: 0,
opacity: 0,
y: 100,
},
visible: {
scale: 1,
opacity: 1,
y: 0,
}
}
}
}
}
}
}
SSR 支持
@vueuse/motion 通过指令和 <Motion /> 组件支持 SSR。
动画的 SSR 支持主要包括从你的组件绑定中解析 initial 变体。
一旦解析,这个 initial 值会与你的组件 style 属性合并。
<template>
<div
v-motion="{
initial: {
y: 100,
opacity: 0
},
enter: {
y: 0,
opacity: 1
}
}"
>
Hello
</div>
<!-- OR -->
<div
v-motion
:initial="initial"
:enter="enter"
>
Hello
</div>
</template>
<script setup>
const initial = ref({
y: 100,
opacity: 0,
})
const enter = ref({
y: 0,
opacity: 1,
})
</script>
这个 div 将会在服务器端渲染为
<div style="opacity:0;transform:translate3d(0px,100px,0px);">Hello</div>
显然你可以想象到很多使用这种方式的实现,并且始终知道你的动画将会被正确地服务器端渲染。