Skip to content

Animation 动画 ​

Lucky UI 的弹层类组件统一复用 useTransition 的内置动画。凡是组件暴露 animationType prop,都可以传入下面任意一个内置动画类型。

animation 与 animationType ​

参数说明取值
animation动画预设名称,适合快速套用统一节奏quick / normal / slow / bounce / scale
animationType内置动画类型,直接指定最终过渡效果见下方 TransitionName 列表
duration动画持续时间,单位 msnumber
delay动画延迟时间,单位 msnumber
easing动画缓动函数见下方缓动函数列表

当同一个组件同时传入 animation 和 animationType 时,animationType 优先级更高。

适用组件 ​

以下组件的 animationType 均支持完整的内置动画类型:

组件说明
Modal 模态框对话框入场与离场动画
Popup 弹出层浮层入场与离场动画
Action Sheet 动作面板面板入场与离场动画
Tooltip 文字提示提示层入场与离场动画
Dropdown 下拉菜单菜单入场与离场动画

基础用法 ​

vue
<lk-dropdown animation-type="dropdown" :duration="180" easing="ease-out-cubic">
  <lk-button>更多操作</lk-button>
  <template #menu>
    <lk-dropdown-item name="edit">编辑</lk-dropdown-item>
  </template>
</lk-dropdown>
vue
<lk-popup v-model="show" animation-type="fade-up" :duration="220" easing="ease-out">
  <view style="padding:32rpx">内容</view>
</lk-popup>

内置动画类型 ​

方向描述默认指入场效果;离场时会按同一轨迹反向收起。

dropdown 是菜单类组件使用的展开动画,会结合组件设置的展开方向调整动效起点。

类型中文含义
dropdown菜单从触发器边缘自然展开,适合 Dropdown、菜单、轻量浮层

Fade ​

类型中文含义
fade原地淡入淡出
fade-up从下方向上淡入
fade-down从上方向下淡入
fade-left从左侧向右淡入
fade-right从右侧向左淡入
fade-up-left从左上方向右下淡入
fade-up-right从右上方向左下淡入
fade-down-left从左下方向右上淡入
fade-down-right从右下方向左上淡入

Slide ​

类型中文含义
slide-up从下方滑入
slide-down从上方滑入
slide-left从左侧滑入
slide-right从右侧滑入

Zoom ​

类型中文含义
zoom-in由小到大缩放进入
zoom-in-up从下方轻微上浮并放大进入
zoom-in-down从上方轻微下移并放大进入
zoom-in-left从左侧轻微右移并放大进入
zoom-in-right从右侧轻微左移并放大进入
zoom-out由大到正常尺寸缩放进入
zoom-out-up从下方轻微上浮并缩小到正常尺寸
zoom-out-down从上方轻微下移并缩小到正常尺寸
zoom-out-left从左侧轻微右移并缩小到正常尺寸
zoom-out-right从右侧轻微左移并缩小到正常尺寸

Flip ​

类型中文含义
flip-left绕 Y 轴从左侧翻转进入
flip-right绕 Y 轴从右侧翻转进入
flip-up绕 X 轴从上方翻转进入
flip-down绕 X 轴从下方翻转进入

Bounce ​

类型中文含义
bounce-in原地弹性缩放进入
bounce-in-up从下方弹入
bounce-in-down从上方弹入
bounce-in-left从左侧弹入
bounce-in-right从右侧弹入

Rotate ​

类型中文含义
rotate-in原地旋转进入
rotate-in-up-left以上左角为轴旋转进入
rotate-in-up-right以上右角为轴旋转进入
rotate-in-down-left以下左角为轴旋转进入
rotate-in-down-right以下右角为轴旋转进入

动画预设 ​

animation 传入的是预设名,不是动画类型。预设会自动带出默认动画类型、时长和缓动函数。

预设默认动画默认时长默认缓动
quickfade-up200ease-out
normalfade-up300ease
slowfade-up500ease-in-out
bouncebounce-in-up600ease-out-back
scalezoom-in300ease-out-cubic

缓动函数 ​

缓动函数中文含义适用场景
linear匀速运动进度、循环、机械式位移
ease默认缓入缓出通用过渡,不强调方向和节奏时使用
ease-in慢启动,后段加速元素离场、收起、逐渐离开视线
ease-out快启动,后段减速元素入场、弹层展开、按钮反馈
ease-in-out两端慢,中段快页面切换、较长距离位移
ease-in-sine柔和慢启动轻量离场、弱提示收起
ease-out-sine柔和减速进入轻量入场、Tooltip、Dropdown
ease-in-out-sine柔和缓入缓出不希望动效过强的通用过渡
ease-in-cubic明显加速离场弹层收起、菜单关闭、内容退出
ease-out-cubic明显减速入场推荐用于菜单、弹层、卡片入场
ease-in-out-cubic强一点的缓入缓出页面级切换、较大面积组件位移
ease-in-back先轻微反向再加速离场有回拉感的关闭动效
ease-out-back入场时轻微越界回弹弹性按钮、强调型弹层、成功反馈
ease-in-out-back两端都有轻微回拉/回弹强表现型动效,谨慎用于小组件

也可以直接传入标准 CSS easing,例如:

vue
<lk-modal animation-type="zoom-in" easing="cubic-bezier(0.16, 1, 0.3, 1)" />

useTransition ​

组件内部统一通过 useTransition 管理进入和离开状态。业务组件也可以直接使用它:

ts
import { useTransition } from '@/uni_modules/lucky-ui/composables';

const { classes, styles, display } = useTransition(
  () => visible.value,
  { name: 'fade-up', duration: 300, easing: 'ease-out-cubic' }
);

更多 hook 参数和状态说明见 Hooks 与工具。

基于 MIT 协议开源