🎯 目标
封装一个经典的旋转加载组件 SpinLoader
,适用于:
-
页面加载、接口请求、提交处理过程中的等待反馈
-
可自定义图标(SVG / Emoji / 图片)
-
支持无限旋转、手动控制开始/暂停
-
可嵌套在按钮、卡片、全屏遮罩中使用
-
后续可扩展为组合动画(旋转+闪烁)、变速旋转、点击加速等效果
🧱 动效结构示意
🔄 图标围绕中心连续旋转(如刷新、加载中)
🧰 组件实现:SpinLoader.ets(无限旋转动画)
@Component
export struct SpinLoader {
@Prop size: number = 40
@Prop icon: string = '🔄'
@Prop duration: number = 800
@Prop autoStart: boolean = true
@State angle: number = 0
@State spinning: boolean = this.autoStart
aboutToAppear() {
if (this.spinning) {
this.rotateLoop()
}
}
build() {
Text(this.icon)
.fontSize(this.size)
.rotate({ angle: this.angle })
.animateTo({ duration: this.duration, curve: Curve.Linear })
}
private async rotateLoop() {
while (this.spinning) {
this.angle += 360
if