不期而至🎁 惊喜礼盒
🎁 Surprise · 不定期 · 随缘更新


🎁 Surprise · 不定期 · 随缘更新
🎁 SURPRISE
谢谢你停在这里。愿你被温柔以待,也愿你带着一点勇气继续往前——这是我留给访客的小小礼物 🎀✨。
— threetwoa
(=;ェ;=) 客来不妨坐下,落叶声里续一壶茶;猫会自己找你。
走进数字花园
复杂高清动效用 GIF,体积先把自己埋了。设计师从 AE(Bodymovin 一类)吐出 JSON,用 lottie-miniprogram 吃进微信小程序 canvas。这是设计导出路线,不是 GSAP 手写 tween,也不是 SVG 十法那套描边/Morph。
同系列:动效库选型管 Web 引擎;SVG 十法管矢量镜头。本篇只钉 uni-app 微信端落地。
| 项 | 口径(原文) |
|---|---|
| 宿主 | uni-app + Vue 3.4 + TS |
| 包 | lottie-miniprogram@1.0.12(官方推荐适配层,源自 lottie-web) |
| 画布 | <canvas type="2d"> |
| 基础库 | ≥ 2.8 新 canvas;2.9 起正式开放 |
| 硬限制 | 不支持 expression,小程序禁动态执行 JS |
核心三拍:lottie.setup(canvas) → loadAnimation({…}) → 页面/组件卸载 animation.destroy()。animationData(本地对象)和 path(仅网络 URL)二选一;rendererSettings.context 必传 2d 上下文。
rpx → px(rpx/750 * windowWidth),再设 canvas.width/height = 逻辑尺寸 * dpr,最后 ctx.scale(dpr, dpr);样式宽高跟逻辑 rpx 对齐。封装成 LottieAnimation 时,够用的 props:width/height(rpx)、json(对象 | 远程 path 字符串)、isShow(v-if 控挂载)。内部把 DPR scale 藏掉;onUnmounted 必 destroy。页面侧本地 JSON import 进来丢给 :json,宽高给个 200rpx 量级就能验。
关键片段(DPR + setup,勿整文件照抄):
1const dpr = uni.getSystemInfoSync().pixelRatio;2canvas.width = rpxToPx(width) * dpr;3canvas.height = rpxToPx(height) * dpr;4ctx.scale(dpr, dpr);5
6lottie.setup(canvas);7state.animation = lottie.loadAnimation({8 loop: true,9 autoplay: true,10 rendererSettings: { context: ctx },11 ...(typeof json === "string" ? { path: json } : { animationData: json }),12});完整示例仓库(文内 Gitee,勿当 star 榜):phao97/miniprogram-lottie-animation-com。官方适配:wechat-miniprogram/lottie-miniprogram。素材与校验:lottiefiles.com、lottie-docs playground、json.cn/lottie。
Web 营销站滚动叙事、时间线编排,回 GSAP / anime 那张选型表。纯 SVG 手写描边、Morph、滤镜,回 SVG 十法。只有「设计师已经吐出 Lottie JSON、目标是微信小程序」时,才值得把 canvas 2d + DPR 这一套接上。
复制链接或生成海报,发给感兴趣的人。

十个前端动效方案按场景选型,附 GSAP 全员免费拐点;别叠两套引擎,也别拿 Three 去拧按钮。
2026-08-11部分内容可能已过时
分享你的想法,与大家交流讨论
像发消息一样写就好:点工具栏插入表情 / 图片,表情会直接显示。插图 ≤5MB。

🎁 Surprise · 不定期 · 随缘更新
🎁 SURPRISE
谢谢你停在这里。愿你被温柔以待,也愿你带着一点勇气继续往前——这是我留给访客的小小礼物 🎀✨。
— threetwoa
有什么想了解的?
我基于博客内容回答