文档

文档

Vue

Radix

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 组件,例如ToastTooltip,非常适合退出动画,但如果没有 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+是一次性付款、终身会员资格,让您可以访问不断增长的高级示例的源代码库,以及像 CursorAnimateNumber 这样的高级组件。

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 组件,例如ToastTooltip,非常适合退出动画,但如果没有 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+是一次性付款、终身会员资格,让您可以访问不断增长的高级示例的源代码库,以及像 CursorAnimateNumber 这样的高级组件。

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 组件,例如ToastTooltip,非常适合退出动画,但如果没有 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+是一次性付款、终身会员资格,让您可以访问不断增长的高级示例的源代码库,以及像 CursorAnimateNumber 这样的高级组件。

Motion+ 提供了大多数 Radix 组件的示例

保持关注

订阅以获取最新消息和更新。

保持关注

订阅以获取最新消息和更新。