组件/物理动效

物理动效

保留 61 种独立的折叠、笔画、堆叠和机械运动结构。

自 0.6.3BETA

当前组件文档正在开发中

该页面正在持续迁移,示例与 API 可能会继续调整。

概述

TxPhysicsMotion 为每个非加载器 whimsical 来源保留独立场景。纸张使用真实铰链和裁切,笔画保留原始 SVG 坐标。机械结构各自保留支点、运动向量、缩放顺序和错时节奏。调用方数据驱动的 Dock 由 TxMotionDock 承载。CSS 加载器与 UI Kit 控件在各自组件页中说明。

每个场景都声明可读的静止终态。暂停、禁用、离开可见区域、隐藏页面、KeepAlive 停用或减少动态效果时,组件取消原生动画和计时器,并显示这个终态。装饰播放不会播报或模拟业务完成。

用法

完整目录

演示呈现全部 61 种具名场景,可以按原始 ID 或来源名称筛选。每个画面都有可用键盘操作的重放按钮。所选场景还提供触发、循环、速度、内容和重放控制。

示例加载中...

播放和触发

auto 在画面进入可见范围时启动。hover 支持指针进入和键盘聚焦重放。click 使用原生按钮,支持 Enter 和空格。manual 只接受 replay() 或变化的 replayKey。重放直接替换旧动画,不强制读取布局来重启动画。

loop=true 保留上游自动循环预览,包括 hover 和 click 场景。只需输入触发的单次动画时,设置 loop=false。各场景按原始 useLoopFlg 节奏重启;内部轨迹保留不同的时长,例如 1 秒的节拍器和 4 秒的齿轮轨迹。单次播放在最长轨迹结束后显示静止终态。

API 参考

属性

属性类型默认值说明
variantPhysicsMotionVariant'anim-card-peel'下方来源映射中的准确 ID。
trigger'auto' | 'hover' | 'click' | 'manual''auto'可见时自动播放、输入重放或仅 API 播放。
loopbooleantrue使用场景自身的重启节奏和内部轨迹时长。
pausedbooleanfalse取消播放并显示静止终态。已排队的重放可在恢复后启动。
disabledbooleanfalse停止动画,并禁用原生交互按钮。
replayKeystring | number—修改此值可在不重新挂载组件时重放。
speednumber1播放倍率,限制在 0.1~5;非有限值按 1 处理。
size'xs' | 'sm' | 'md' | 'lg''md'96、128、160 或 192 px 的舞台,几何按比例缩放。
ariaLabelstring来源名称或 labels.replay可访问名称。hover/click 场景是原生按钮,其余场景是图像。
labelsPartial<PhysicsMotionLabels>见下表本地化操作文案和画面内容。

文案

字段默认值用途
replay'Replay animation'交互舞台的默认可访问名称。
content'Open'闸门和水平滑门实际揭示的文本。
north'N'磁极北端方块标签。
south'S'磁极南端方块标签。

事件

事件载荷说明
playPhysicsMotionVariant原生播放或来源循环重启实际开始。
finishPhysicsMotionVariant最长单次轨迹结束,显示静止终态。循环和取消不触发此事件。
coveredPhysicsMotionVariantTsumiki 来源在 1400 ms 的实际覆盖节点,按速度调整。它不代表保存、导航或网络成功。

插槽和方法

项目契约
default 插槽可选说明文字,位于交互舞台外,使用稳定的 Vue ID 关联。
replay()替换当前播放。失活时保留请求,等恢复后执行;减少动态效果时保持静止终态。
reset()取消全部轨迹和排队请求,显示静止终态。
playing暴露的布尔值,表示实例当前是否持有正在播放的原生轨迹。

导出

@talex-touch/tuffex/physics-motion 导出 TxPhysicsMotion、可安装的 PhysicsMotion、TxPhysicsMotionInstance、PhysicsMotionProps、PhysicsMotionEmits、PhysicsMotionLabels、PhysicsMotionTrigger、PhysicsMotionVariant 和 PhysicsMotionSource。

PHYSICS_MOTION_VARIANTS 是完整的只读 ID 元组。PHYSICS_MOTION_SOURCES 为每个变体提供真实映射,包含 variant、symbol、file、period 和 behavior。PHYSICS_MOTION_DEFAULT_LABELS 提供上表默认文案。

CSS 变量

变量用途
--tx-physics-accent可选强调色,默认使用 --tx-color-primary。关联色调与宿主表面和文字 token 混合生成。
--tx-physics-size / --tx-physics-scale舞台边长和无量纲画面倍率,由 size 同时驱动。

纸张、线条、底色和文字都使用宿主的 --tx-* token。悬停颜色立即变化。

来源映射

下表记录来源的整场重启间隔,不用统一时长替代各条轨迹。全部链接固定到上游提交 43c29ce9cdd16459e3eab4992381b8d35b38776a。

变体原始名称重启间隔独立结构和轨迹固定版本实现
anim-card-peelCardStackPeel3000 ms顶层卡片向下剥离 24 px,并绕顶边透视翻转 25°,露出底卡。源码
anim-bookmark-cornerBookmarkCornerPeel3000 ms右上角沿折线裁开,折角从右上方滑入。源码
anim-elastic-tagElasticTagSnap3000 ms行李牌向下拉伸,再向上回弹并衰减到挂点。源码
bookmark-stamp-dropBookmarkStampDrop3000 ms印章吊牌从上方落下,按正负角度交替摆动并收敛。源码
anim-split-gateSplitGateReveal3000 ms上下两块闸门分别沿纵轴移开,露出调用方文本。源码
anim-shutter-slideShutterSlide3000 ms左右半幅面板沿横轴移开自身宽度的 95%。源码
diagonal-drapeDiagonalDrape3000 ms布面沿对角线裁开,露出底色,拉绳销保持在右上角。源码
anim-origami-envelopeOrigamiEnvelopeUnfold3000 ms三角信封盖绕顶部铰链翻转 180°。源码
anim-card-dispenserSmartCardDispenser3000 ms证件卡从设备槽后向上弹出 38 px。源码
anim-sticky-noteStickyNotePeel3000 ms便签从装订顶边抬起,翻转到 90° 时离开画面。源码
anim-receipt-tapeReceiptTapePrint3000 ms收据按四级打印节奏向下送纸,停留后收回。源码
anim-roller-blindRollerBlindDrop3000 ms卷帘从固定横杆向下展开,再回卷。源码
anim-scroll-canvasScrollCanvasUnroll3000 ms卷轴画布从中间向两侧展开,左右滚轴随边缘移动。源码
flag-pennant-unfurlFlagPennantUnfurl3000 ms三角旗从固定旗杆向右展开。源码
anim-ribbon-bannerRibbonBannerSlide3000 ms胶囊横幅从中间向两侧展开,保留两个内部标记。源码
anim-page-turnPageTurnCurl3000 ms纸页向上升起 60 px,底角逐渐展开,45° 倾斜回到平面。源码
area1Area12200 ms悬挂布面在两根滚轴之间展开,展开和收起都带高度过冲。源码
tissueTissue3000 ms前一张纸巾向上抽走,下一张从盒口推出。源码
curtainCurtain3200 ms中心拉链上行,两侧镜像布面弯曲让开,拉环随移动摆动。源码
anim-tension-capsuleKineticTensionCapsule2800 ms橡胶胶囊横向拉长、纵向压缩再回弹,内部两个节点随张力分离。源码
area6Area61400 ms单色胶囊先加宽,再缩过静止宽度,并二次回弹。源码
anim-droplet-squishDropletSquish2400 ms液滴在扁平和拉长轮廓之间变形,上下端圆角独立变化。源码
anim-segmented-linkSegmentedLinkStretch2400 ms三个胶囊关节的两端各向外移动 14 px,再回到链条位置。源码
anim-blind-pullBlindPull2800 ms五片百叶沿纵轴逐片分离,拉绳和拉头一起下移。源码
anim-rotating-louversRotatingLouvers3000 ms四片百叶以不同延迟各自翻转 75°。源码
anim-iris-shutterGeometricIrisShutter3000 ms方形快门围绕圆形中心旋转 60° 并展开。源码
radial-apertureRadialAperture3000 ms圆形外框内的圆角方形光圈旋转 90° 并放大。源码
anim-bubble-levelPendulumBubbleLevel3000 ms水平仪气泡穿过中心刻线,左右过冲并逐步减幅。源码
anim-kinetic-metronomeKineticTickingMetronome2000 ms带配重的节拍器杆绕底部支点往复摆动 ±35°。源码
newtons-cradleNewtonsCradle2400 ms牛顿摆左右端球在周期的前后半段交替摆动。源码
anim-orbital-gimbalNestedOrbitalGimbal3000 ms外方环按 4 秒顺时针、内圆环按 2 秒反向的轨迹转动;整体按来源每 3 秒重启。源码
gyroscope-ringsGyroscopeRings3000 ms圆环绕固定核心完成 X 轴整周、Y 轴半周透视旋转。源码
anim-slinky-coilSlinkyCoil2400 ms五层横向弹簧线圈从底部锚点向上伸展并压缩。源码
anim-squash-sphereSquashStretchSphere2200 ms橡胶球落地压扁,反弹拉长,再回到发射高度。源码
anim-gelatin-wobbleGelatinWobble2200 ms方形果冻落地后,按六级衰减节奏上下移动并改变宽高比。源码
anim-domino-chainDominoChain3000 ms五张骨牌依次绕右下角翻倒 72°,随后复位。源码
anim-card-cascadeCardDeckCascade3000 ms三张牌绕底部向两侧扇开 ±22°,同时横向移动 ±24 px。源码
fan-foldFanFold2800 ms五根扇骨围绕共同铆钉展开,最外两根达到 ±40°。源码
anim-gear-stepGearToothStep3000 ms两个带齿圆环按 4 秒轨迹同步反向转动;整体按来源每 3 秒重启。源码
anim-magnetic-disksMagneticDisks2400 ms两个圆盘伸长相吸,接触时压缩,再回弹分离。源码
anim-dual-magnetDualMagnetDipole2400 ms标有南北极的方块将间距从 28 px 收到 4 px,整体同时放大。源码
anim-compass-deflectCompassNeedleDeflect2600 ms双色罗盘指针先偏转 65°,再过冲到 −45° 并回正。源码
balance-scaleBalanceScale3200 ms左右砝码错时落下,天平横杆产生衰减倾斜。源码
anim-sudden-brakeSuddenBrake2800 ms车辆从右侧减速进场,随后绕左轮向后倾斜并收敛。源码
anim-rolling-tumbleRollingTumble2600 ms立方体以 2200 ms 轨迹逐步翻滚,按来源每 2600 ms 重启。源码
anim-inertia-skidInertiaSkidStop2800 ms滑块在落点两侧过冲,剪切角随摩擦反向并归零。源码
anim-circuit-traceCircuitTraceDraw3000 ms折线 PCB 轨迹在两个固定端点之间绘制,再逐段擦除。源码
anim-hex-latticeHexagonLatticeDraw3000 ms六边形线框沿周长绘制并擦除。源码
anim-stroke-waveformStrokeWaveform3000 ms原始心电波形从左向右绘制,再逐步擦除。源码
stroke-spiralStrokeSpiral3000 ms环形笔迹绘制时旋转 180°,后半周旋转时擦除。源码
kakikakiKakikaki3000 ms原始七点书法折线沿完整笔画绘制并擦除。源码
anim-neon-signNeonSignDraw2800 ms另一条霓虹脉冲折线在 240 ms 内画出,停留后用 1200 ms 清除。源码
anim-prism-stackPrismBlockStack3000 ms三层棱块从宽底座到窄顶层错时落下并堆叠。源码
anim-modular-tileModularTileSnap3000 ms两个旋转模块依次就位,分别带圆形和方形嵌件。源码
anim-pyramid-buildPyramidBlockBuild3000 ms三、二、一块的金字塔从底层到顶层错时放大组装。源码
tetris-block-settleTetrisBlockSettle3000 ms真正的三格 L 形积木落在固定的三格底座上。源码
anim-shutter-blocksShutterStepBlocks2800 ms四条横向片层从左向右展开,每层延迟 80 ms。源码
magnetic-orbit-particleMagneticOrbitParticle3000 ms卫星节点以 2600 ms 轨迹绕磁芯转动,按来源每 3000 ms 重启。源码
magnetic-grid-repelMagneticGridRepel2600 ms四个磁场节点沿各自对角线向外散开并返回。源码
tsumikiTsumiki3000 ms五根积木条以交替角度落下,在 1400 ms 覆盖完成,再按反向顺序离场。源码
bookmarkBookmark3600 ms缺口书签层分批透视落下和抬升;圆形底色和四个星光依次出现。源码

最佳实践

  • 按交互选择几何结构。纸张揭示、机械转轴和笔画绘制保留不同载体;修改 variant 会改变真实结构。
  • 提供本地化 labels 和符合上下文的 ariaLabel。业务内容放在说明插槽或调用方界面中。
  • 输入反馈使用 loop=false。只有明确需要装饰预览时才自动循环。
  • 业务状态由真实数据驱动。finish 和 covered 只表示画面的时间节点。
  • 可见性和减少动态效果由组件管理。调用方无需再建计时器重放来源节奏。
  • 目录直接使用 PHYSICS_MOTION_SOURCES,不维护另一份 ID 列表。

技术实现

组件使用原生 HTML/SVG 和 Web Animations。每个来源保留自身关键帧、裁切和嵌套支点。弹性段复用 liquid 的 resolveTransition 编译器,没有第二套积分器。宽高揭示通过裁切和边缘平移保持内部标记不被拉伸。共享 useMotionActivity 控制全部动画和场景计时器。组件不需要 SVG defs 或全局计数器;说明文字的标识使用 Vue useId。

按 MIT 许可改编。Copyright (c) 2026 SYED SUBHAN UDDIN。本页记录实现契约,不声称浏览器或包级验证已完成。