feat(leaderboard): 下拉刷新动画图标
下拉刷新时顶部显示主题色旋转 spinner + "刷新中…"指示器, 仅下拉刷新显示(pullRefreshing),后台静默刷新保持无感。 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,7 @@ Page({
|
|||||||
myEntry: null,
|
myEntry: null,
|
||||||
loading: false,
|
loading: false,
|
||||||
refreshing: false,
|
refreshing: false,
|
||||||
|
pullRefreshing: false,
|
||||||
empty: false,
|
empty: false,
|
||||||
icons: iconsMod.build()
|
icons: iconsMod.build()
|
||||||
},
|
},
|
||||||
@@ -48,7 +49,11 @@ Page({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onPullDownRefresh() {
|
onPullDownRefresh() {
|
||||||
this.fetchRank(() => wx.stopPullDownRefresh(), true)
|
this.setData({ pullRefreshing: true })
|
||||||
|
this.fetchRank(() => {
|
||||||
|
this.setData({ pullRefreshing: false })
|
||||||
|
wx.stopPullDownRefresh()
|
||||||
|
}, true)
|
||||||
},
|
},
|
||||||
|
|
||||||
switchPeriod(e) {
|
switchPeriod(e) {
|
||||||
|
|||||||
@@ -12,6 +12,12 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 刷新中指示器(下拉刷新) -->
|
||||||
|
<view class="refresh-indicator" wx:if="{{pullRefreshing}}">
|
||||||
|
<view class="refresh-spinner"></view>
|
||||||
|
<text class="refresh-text">刷新中…</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
<!-- Loading: 旋转加载图标 + 骨架屏 -->
|
<!-- Loading: 旋转加载图标 + 骨架屏 -->
|
||||||
<view class="leaderboard-skeleton" wx:if="{{loading}}">
|
<view class="leaderboard-skeleton" wx:if="{{loading}}">
|
||||||
<view class="lb-loading">
|
<view class="lb-loading">
|
||||||
|
|||||||
@@ -467,6 +467,39 @@
|
|||||||
color: var(--text-secondary);
|
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: 旋转加载图标 + 骨架屏容器 */
|
/* Loading: 旋转加载图标 + 骨架屏容器 */
|
||||||
.leaderboard-skeleton {
|
.leaderboard-skeleton {
|
||||||
padding: 40rpx 32rpx 0;
|
padding: 40rpx 32rpx 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user