|
@@ -13,8 +13,21 @@
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
|
|
|
+ <!-- 骨架屏加载状态 -->
|
|
|
|
|
+ <scroll-view scroll-y class="audio-list" @scrolltolower="loadMore" v-if="loading && audioList.length === 0">
|
|
|
|
|
+ <view class="skeleton-grid">
|
|
|
|
|
+ <view v-for="i in 6" :key="i" class="skeleton-card">
|
|
|
|
|
+ <view class="skeleton-cover"></view>
|
|
|
|
|
+ <view class="skeleton-info">
|
|
|
|
|
+ <view class="skeleton-title"></view>
|
|
|
|
|
+ <view class="skeleton-meta"></view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </scroll-view>
|
|
|
|
|
+
|
|
|
<!-- 音频列表 -->
|
|
<!-- 音频列表 -->
|
|
|
- <scroll-view scroll-y class="audio-list" @scrolltolower="loadMore">
|
|
|
|
|
|
|
+ <scroll-view scroll-y class="audio-list" @scrolltolower="loadMore" v-else>
|
|
|
<view v-if="audioList.length === 0 && !loading" class="empty">
|
|
<view v-if="audioList.length === 0 && !loading" class="empty">
|
|
|
<text class="empty-icon">🎵</text>
|
|
<text class="empty-icon">🎵</text>
|
|
|
<text class="empty-text">暂无音频</text>
|
|
<text class="empty-text">暂无音频</text>
|
|
@@ -425,4 +438,55 @@ onShow(() => {
|
|
|
font-weight: 600;
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
color: #ffffff;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+/* 骨架屏样式 */
|
|
|
|
|
+.skeleton-grid {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
|
+ padding: 24rpx;
|
|
|
|
|
+ gap: 20rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.skeleton-card {
|
|
|
|
|
+ width: calc(50% - 10rpx);
|
|
|
|
|
+ background: #ffffff;
|
|
|
|
|
+ border-radius: 16rpx;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.skeleton-cover {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 240rpx;
|
|
|
|
|
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
|
|
|
+ background-size: 200% 100%;
|
|
|
|
|
+ animation: shimmer 1.5s infinite;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.skeleton-info {
|
|
|
|
|
+ padding: 20rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.skeleton-title {
|
|
|
|
|
+ height: 28rpx;
|
|
|
|
|
+ width: 80%;
|
|
|
|
|
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
|
|
|
+ background-size: 200% 100%;
|
|
|
|
|
+ animation: shimmer 1.5s infinite;
|
|
|
|
|
+ border-radius: 8rpx;
|
|
|
|
|
+ margin-bottom: 12rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.skeleton-meta {
|
|
|
|
|
+ height: 22rpx;
|
|
|
|
|
+ width: 50%;
|
|
|
|
|
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
|
|
|
+ background-size: 200% 100%;
|
|
|
|
|
+ animation: shimmer 1.5s infinite;
|
|
|
|
|
+ border-radius: 8rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@keyframes shimmer {
|
|
|
|
|
+ 0% { background-position: 200% 0; }
|
|
|
|
|
+ 100% { background-position: -200% 0; }
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|