feat(leaderboard): 下拉刷新动画图标

下拉刷新时顶部显示主题色旋转 spinner + "刷新中…"指示器,
仅下拉刷新显示(pullRefreshing),后台静默刷新保持无感。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-28 09:20:43 +08:00
parent b42d080826
commit faa49cff1c
3 changed files with 45 additions and 1 deletions
+6 -1
View File
@@ -18,6 +18,7 @@ Page({
myEntry: null,
loading: false,
refreshing: false,
pullRefreshing: false,
empty: false,
icons: iconsMod.build()
},
@@ -48,7 +49,11 @@ Page({
},
onPullDownRefresh() {
this.fetchRank(() => wx.stopPullDownRefresh(), true)
this.setData({ pullRefreshing: true })
this.fetchRank(() => {
this.setData({ pullRefreshing: false })
wx.stopPullDownRefresh()
}, true)
},
switchPeriod(e) {
+6
View File
@@ -12,6 +12,12 @@
</view>
</view>
<!-- 刷新中指示器(下拉刷新) -->
<view class="refresh-indicator" wx:if="{{pullRefreshing}}">
<view class="refresh-spinner"></view>
<text class="refresh-text">刷新中…</text>
</view>
<!-- Loading: 旋转加载图标 + 骨架屏 -->
<view class="leaderboard-skeleton" wx:if="{{loading}}">
<view class="lb-loading">
+33
View File
@@ -467,6 +467,39 @@
color: var(--text-secondary);
}
/* 刷新中指示器:下拉刷新时顶部显示(后台静默刷新不显示,保持无感) */
.refresh-indicator {
display: flex;
align-items: center;
justify-content: center;
gap: 10rpx;
padding: 14rpx 0;
animation: refreshFadeIn 0.2s ease;
}
.refresh-spinner {
width: 28rpx;
height: 28rpx;
border: 3rpx solid rgba(var(--primary-rgb), 0.2);
border-top-color: var(--primary);
border-radius: 50%;
animation: refreshSpin 0.8s linear infinite;
}
.refresh-text {
font-size: 24rpx;
color: var(--text-secondary);
}
@keyframes refreshSpin {
to { transform: rotate(360deg); }
}
@keyframes refreshFadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* Loading: 旋转加载图标 + 骨架屏容器 */
.leaderboard-skeleton {
padding: 40rpx 32rpx 0;