Motion 与 Radix 集成
Radix-Vue是 Vue 最流行的组件库之一,只需几个步骤即可使用 Motion for Vue 进行动画制作。
在本指南中,我们将学习如何使用 motion
组件与 Radix 原始组件一起使用,以及退出和布局动画的特定设置。
设置 motion
组件
大多数 Radix 组件渲染并控制它们自己的 DOM 元素。但它们也提供theasChild
属性当设置为 true
时,将使组件使用提供的第一个子元素作为其 DOM 节点。
通过传递一个 motion
组件作为这个子元素,我们现在可以像平常一样使用它的所有动画属性
<template> <ToastRoot :as-child="true"> <Motion :initial="{ opacity: 0 }" :animate="{ opacity: 1 }" layout >
退出动画
许多 Radix 组件,例如Toast或Tooltip,非常适合退出动画,但如果没有 Motion 的 AnimatePresence
,则无法执行它们。
AnimatePresence
构建于 Vue 的 Transition 组件之上,这就是它跟踪哪些组件正在退出的方式
<template> <AnimatePresence> <Motion v-if="isOpen" :exit="{ opacity: 0 }" /> </AnimatePresence> </template>
将退出动画与 Motion Vue 和 Radix 组件一起使用非常简单。只需使用 AnimatePresence
包裹您的卸载组件,它就可以检测到直接子 DOM 卸载并触发退出动画。
例如,与 Tooltip 组件一起使用:
<Tooltip.Provider> <Tooltip.Root> <Tooltip.Trigger class="tooltip-trigger"> Hover or focus </Tooltip.Trigger> <Tooltip.Portal> <AnimatePresence> <Tooltip.Content as-child :side-offset="10"> <motion.div class="tooltip-content" :initial="{ opacity: 0, y: 20, scale: 0.8 }" :animate="{ opacity: 1, y: 0, scale: 1 }" :exit="{ opacity: 0,y: 20,}" > Add to library <Tooltip.Arrow class="tooltip-arrow" /> </motion.div> </Tooltip.Content> </AnimatePresence> </Tooltip.Portal> </Tooltip.Root> </Tooltip.Provider>
布局动画
布局动画也需要这种将状态提升到组件外部的相同模式。
<script setup> const tab = ref('account') </script> <template> <Tabs.Root v-model="tab" as-child > <motion.div layout>
这是为了确保 motion
组件知道在状态更改时执行布局动画。您甚至可以将此状态传递给 layoutDependency
以获得更好的性能。
<motion.div layout :layoutDependency="tab">
Motion+ 示例
Motion+是一次性付款、终身会员资格,让您可以访问不断增长的高级示例的源代码库,以及像 Cursor
和 AnimateNumber
这样的高级组件。
Motion+ 提供了大多数 Radix 组件的示例
Radix-Vue是 Vue 最流行的组件库之一,只需几个步骤即可使用 Motion for Vue 进行动画制作。
在本指南中,我们将学习如何使用 motion
组件与 Radix 原始组件一起使用,以及退出和布局动画的特定设置。
设置 motion
组件
大多数 Radix 组件渲染并控制它们自己的 DOM 元素。但它们也提供theasChild
属性当设置为 true
时,将使组件使用提供的第一个子元素作为其 DOM 节点。
通过传递一个 motion
组件作为这个子元素,我们现在可以像平常一样使用它的所有动画属性
<template> <ToastRoot :as-child="true"> <Motion :initial="{ opacity: 0 }" :animate="{ opacity: 1 }" layout >
退出动画
许多 Radix 组件,例如Toast或Tooltip,非常适合退出动画,但如果没有 Motion 的 AnimatePresence
,则无法执行它们。
AnimatePresence
构建于 Vue 的 Transition 组件之上,这就是它跟踪哪些组件正在退出的方式
<template> <AnimatePresence> <Motion v-if="isOpen" :exit="{ opacity: 0 }" /> </AnimatePresence> </template>
将退出动画与 Motion Vue 和 Radix 组件一起使用非常简单。只需使用 AnimatePresence
包裹您的卸载组件,它就可以检测到直接子 DOM 卸载并触发退出动画。
例如,与 Tooltip 组件一起使用:
<Tooltip.Provider> <Tooltip.Root> <Tooltip.Trigger class="tooltip-trigger"> Hover or focus </Tooltip.Trigger> <Tooltip.Portal> <AnimatePresence> <Tooltip.Content as-child :side-offset="10"> <motion.div class="tooltip-content" :initial="{ opacity: 0, y: 20, scale: 0.8 }" :animate="{ opacity: 1, y: 0, scale: 1 }" :exit="{ opacity: 0,y: 20,}" > Add to library <Tooltip.Arrow class="tooltip-arrow" /> </motion.div> </Tooltip.Content> </AnimatePresence> </Tooltip.Portal> </Tooltip.Root> </Tooltip.Provider>
布局动画
布局动画也需要这种将状态提升到组件外部的相同模式。
<script setup> const tab = ref('account') </script> <template> <Tabs.Root v-model="tab" as-child > <motion.div layout>
这是为了确保 motion
组件知道在状态更改时执行布局动画。您甚至可以将此状态传递给 layoutDependency
以获得更好的性能。
<motion.div layout :layoutDependency="tab">
Motion+ 示例
Motion+是一次性付款、终身会员资格,让您可以访问不断增长的高级示例的源代码库,以及像 Cursor
和 AnimateNumber
这样的高级组件。
Motion+ 提供了大多数 Radix 组件的示例
Radix-Vue是 Vue 最流行的组件库之一,只需几个步骤即可使用 Motion for Vue 进行动画制作。
在本指南中,我们将学习如何使用 motion
组件与 Radix 原始组件一起使用,以及退出和布局动画的特定设置。
设置 motion
组件
大多数 Radix 组件渲染并控制它们自己的 DOM 元素。但它们也提供theasChild
属性当设置为 true
时,将使组件使用提供的第一个子元素作为其 DOM 节点。
通过传递一个 motion
组件作为这个子元素,我们现在可以像平常一样使用它的所有动画属性
<template> <ToastRoot :as-child="true"> <Motion :initial="{ opacity: 0 }" :animate="{ opacity: 1 }" layout >
退出动画
许多 Radix 组件,例如Toast或Tooltip,非常适合退出动画,但如果没有 Motion 的 AnimatePresence
,则无法执行它们。
AnimatePresence
构建于 Vue 的 Transition 组件之上,这就是它跟踪哪些组件正在退出的方式
<template> <AnimatePresence> <Motion v-if="isOpen" :exit="{ opacity: 0 }" /> </AnimatePresence> </template>
将退出动画与 Motion Vue 和 Radix 组件一起使用非常简单。只需使用 AnimatePresence
包裹您的卸载组件,它就可以检测到直接子 DOM 卸载并触发退出动画。
例如,与 Tooltip 组件一起使用:
<Tooltip.Provider> <Tooltip.Root> <Tooltip.Trigger class="tooltip-trigger"> Hover or focus </Tooltip.Trigger> <Tooltip.Portal> <AnimatePresence> <Tooltip.Content as-child :side-offset="10"> <motion.div class="tooltip-content" :initial="{ opacity: 0, y: 20, scale: 0.8 }" :animate="{ opacity: 1, y: 0, scale: 1 }" :exit="{ opacity: 0,y: 20,}" > Add to library <Tooltip.Arrow class="tooltip-arrow" /> </motion.div> </Tooltip.Content> </AnimatePresence> </Tooltip.Portal> </Tooltip.Root> </Tooltip.Provider>
布局动画
布局动画也需要这种将状态提升到组件外部的相同模式。
<script setup> const tab = ref('account') </script> <template> <Tabs.Root v-model="tab" as-child > <motion.div layout>
这是为了确保 motion
组件知道在状态更改时执行布局动画。您甚至可以将此状态传递给 layoutDependency
以获得更好的性能。
<motion.div layout :layoutDependency="tab">
Motion+ 示例
Motion+是一次性付款、终身会员资格,让您可以访问不断增长的高级示例的源代码库,以及像 Cursor
和 AnimateNumber
这样的高级组件。
Motion+ 提供了大多数 Radix 组件的示例