5分钟上手mojs动画骨架屏生成器:从静态到灵动的蜕变
【免费下载链接】mojs 项目地址: https://gitcode.com/gh_mirrors/moj/mojs
你是否曾为网页加载时的空白等待感到困扰?用户盯着静止的界面超过3秒就可能流失。mojs动画骨架屏工具(src/shape.babel.js)能让等待过程变成一场微交互盛宴,本文将带你用最少代码实现动态骨架屏。
为什么选择mojs骨架屏
传统骨架屏只是静态灰色块,而mojs提供:
- 原生SVG动画:比CSS过渡更流畅的60fps动画
- 模块化设计:支持20+基础图形组合(src/shapes/)
- 零依赖:仅需引入30KB核心库即可运行
快速开始:3步实现按钮加载动画
1. 引入mojs库
使用国内CDN加速地址,确保毫秒级加载:
<script src="https://cdn.jsdelivr.net/npm/@mojs/core"></script>
2. 创建基础骨架
通过Shape类(src/shape.babel.js)定义按钮骨架轮廓:
const buttonSkeleton = new mojs.Shape({
shape: 'rect', // 矩形形状
radius: 4, // 圆角4px
width: 120, // 按钮宽度
height: 40, // 按钮高度
fill: '#f0f0f0', // 骨架底色
left: '50%', // 水平居中
top: '50%', // 垂直居中
x: '-50%', // X轴偏移修正
y: '-50%' // Y轴偏移修正
});
3. 添加呼吸动画
利用Tween(src/tween/tween.babel.js)实现渐显效果:
buttonSkeleton.tune({
opacity: { 0.6: 1 }, // 透明度从0.6→1循环
duration: 1200, // 动画周期1.2秒
isYoyo: true, // 往返动画
isRepeat: true // 无限循环
}).play();
高级技巧:列表骨架屏组合
多元素编排
使用Stagger(src/stagger.babel.js)实现 staggered 动画队列:
// 创建5个列表项骨架
const listItems = new mojs.Shape({
shape: 'rect',
width: 300,
height: 60,
fill: '#f0f0f0',
left: 50,
top: (i) => 100 + i * 70, // 垂直排列
stagger: 150 // 每项延迟150ms
}, 5); // 创建5个实例
骨架屏转真实内容
监听数据加载完成事件,平滑过渡到真实内容:
// 数据加载完成后执行
function onDataLoaded() {
listItems.tune({
opacity: 0, // 淡出骨架屏
duration: 300
}).play().then({
onComplete: () => {
listItems.el.remove(); // 移除骨架屏
renderRealContent(); // 渲染真实内容
}
});
}
性能优化指南
| 优化策略 | 实现代码 | 性能提升 |
|---|---|---|
| 使用CSS containment | el.style.contain = "layout paint size" | 减少重排范围 |
| 启用硬件加速 | isForce3d: true(src/shape.babel.js#L60) | GPU渲染提速30% |
| 复用动画实例 | const tween = mojs.tweener.get()(src/tween/tweener.babel.js) | 减少内存占用 |
常见场景模板
电商商品卡片
// 商品图片骨架
new mojs.Shape({
shape: 'circle',
radius: 40,
left: 50,
top: 50
}).tune({
scale: { 0.8: 1.05 }, // 呼吸缩放效果
duration: 1500,
isYoyo: true,
isRepeat: true
}).play();
// 价格标签骨架
new mojs.Shape({
shape: 'rect',
width: 80,
height: 24,
radius: 3,
left: 150,
top: 70,
fill: '#f0f0f0'
});
社交媒体评论
// 头像+文字组合骨架
const commentSkeleton = new mojs.ShapeSwirl({ // 组合图形([src/shape-swirl.babel.js](https://link.gitcode.com/i/1ab25a9ccf4ded1834720c479e6f0624))
shapes: [
{ shape: 'circle', radius: 24, left: 0 },
{ shape: 'rect', width: 200, height: 16, top: -15, left: 50 },
{ shape: 'rect', width: 150, height: 16, top: 15, left: 50 }
]
});
资源与学习路径
- 官方文档:README.md
- 核心API:src/mojs.babel.js
- 动画曲线编辑器:建议配合mojs-curve-editor使用
- 社区案例:dev/index.html包含12种预设动画
只需5分钟,mojs就能让你的骨架屏从"等待提示"升级为"品牌体验"。立即尝试将本文代码复制到你的项目,让每个加载状态都成为用户记忆点。关注我们,下期将分享如何用Timeline(src/tween/timeline.babel.js)实现复杂场景的动画编排。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



