Skip to content

Commit be73141

Browse files
committed
✨ Add Skeleton for degest
1 parent e4c7a54 commit be73141

File tree

2 files changed

+65
-15
lines changed

2 files changed

+65
-15
lines changed

deploy.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ echo 'google.com, pub-8586652723015758, DIRECT, f08c47fec0942fa0' > ads.txt
1616

1717
git init
1818
git add -A
19-
git commit -m 'deploy update 🎉'
19+
git commit -m '🚀 local build for deploy'
2020

2121
# 如果发布到 https://<USERNAME>.github.io
2222
# git push -f [email protected]:<USERNAME>/<USERNAME>.github.io.git master

src/views/Digest.vue

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,27 @@
11
<template>
22
<div class="w-[80rem] md:w-full flex md:flex-col items-start justify-between p-6 md:p-0">
33

4-
<div class="w-3/5 mb-4 mr-8 md:w-full">
4+
<div class="relative w-3/5 mb-4 mr-8 md:w-full">
5+
<!-- Skeleton loading -->
6+
<div v-if="isLoading" class="absolute top-0 w-full aspect-[500/660] rounded-xl overflow-hidden bg-gray-50">
7+
<!-- 主体骨架 -->
8+
<div class="absolute inset-0 bg-gradient-to-br from-gray-200 to-gray-100"></div>
9+
<!-- 文字区域骨架 -->
10+
<div class="absolute inset-0 flex flex-col items-center justify-center p-8 space-y-4">
11+
<div class="w-1/2 h-4 bg-gray-300 rounded animate-pulse"></div>
12+
<div class="w-2/3 h-4 bg-gray-300 rounded animate-pulse"></div>
13+
<div class="w-2/3 h-4 bg-gray-300 rounded animate-pulse"></div>
14+
<div class="w-3/4 h-4 bg-gray-300 rounded animate-pulse"></div>
15+
<div class="w-2/3 h-4 bg-gray-300 rounded animate-pulse"></div>
16+
<div class="w-1/2 h-4 bg-gray-300 rounded animate-pulse"></div>
17+
</div>
18+
<!-- 闪光效果 -->
19+
<div class="absolute inset-0">
20+
<div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent animate-shimmer">
21+
</div>
22+
</div>
23+
</div>
24+
<!-- Canvas content -->
525
<canvas id="digest" ref="canvasRef" width="500" height="660" class="w-full border rounded-xl"></canvas>
626
</div>
727

@@ -71,11 +91,13 @@
7191
<!-- 背景选择部分的修改 -->
7292
<strong class="text-lg font-medium">选择背景</strong>
7393
<div class="grid grid-cols-3 gap-6 md:grid-cols-2">
74-
<!-- 现有背景选项部分保持不变 -->
7594
<div v-for="(bg, index) in backgrounds" :key="index"
76-
class="w-24 h-24 overflow-hidden border rounded-lg cursor-pointer"
77-
:class="{ 'ring-2 ring-blue-500': selectedBg === index }" @click="selectedBg = index">
78-
<img :src="bg" class="object-cover w-full h-full" />
95+
class="w-24 h-24 overflow-hidden transition-all duration-200 border rounded-lg cursor-pointer group hover:shadow-md"
96+
:class="{ 'ring-2 ring-blue-500 shadow-lg': selectedBg === index }" @click="selectedBg = index"
97+
role="button" :aria-label="`选择文摘背景图片 ${index + 1}`" :title="`背景图片 ${index + 1}`">
98+
<img :src="bg" class="object-cover w-full h-full transition-transform duration-300 group-hover:scale-110"
99+
loading="lazy" :alt="`文摘背景图片 ${index + 1}`" @error="handleImageError(index)"
100+
@load="handleImageLoad(index)" />
79101
</div>
80102
</div>
81103

@@ -138,6 +160,7 @@ const letterSpacing = ref(100)
138160
const fontWeight = ref('normal')
139161
const textColor = ref('#000000')
140162
const selectedBg = ref(0)
163+
const isLoading = ref(true)
141164
const { proxy } = getCurrentInstance() as any
142165
143166
// 添加字重选项配置
@@ -181,22 +204,26 @@ onMounted(() => {
181204
loadBackgroundImage()
182205
})
183206
184-
// 加载背景图
207+
// 修改 loadBackgroundImage 函数
185208
const loadBackgroundImage = () => {
209+
isLoading.value = true
186210
const img = new Image()
187211
img.onload = () => {
188212
drawCanvas(img)
213+
isLoading.value = false
214+
}
215+
img.onerror = () => {
216+
toast.show('背景图片加载失败')
217+
isLoading.value = false
189218
}
190219
img.src = backgrounds.value[selectedBg.value]
191220
}
192221
193-
// 绘制 canvas
194222
const drawCanvas = async (backgroundImage) => {
195223
const canvas = canvasRef.value
196224
const context = ctx.value
197225
const padding = 10 // 设置内边距
198226
199-
// 清空画布
200227
context.clearRect(0, 0, canvas.width, canvas.height)
201228
202229
// 绘制背景
@@ -293,10 +320,12 @@ function onCopyImage() {
293320
})
294321
])
295322
toast.show('已复制图片至您的剪切板')
323+
proxy.$reortGaEvent('copy-image', 'digest')
296324
})
297325
.catch((error) => {
298326
console.error('复制图片失败:', error)
299327
toast.show('复制图片失败,请重试')
328+
proxy.$reortGaEvent('copy-image-failed', 'digest')
300329
})
301330
}
302331
@@ -307,10 +336,12 @@ function onSave2Image() {
307336
.then((blob) => {
308337
download2png(blob)
309338
toast.show('已成功为你保存图片')
339+
proxy.$reortGaEvent('save-image', 'digest')
310340
})
311341
.catch((error) => {
312342
console.error('保存图片失败:', error)
313343
toast.show('保存图片失败,请重试')
344+
proxy.$reortGaEvent('save-image-failed', 'digest')
314345
})
315346
}
316347
// 处理图片上传
@@ -324,15 +355,10 @@ const handleImageUpload = (event: Event) => {
324355
return
325356
}
326357
327-
// 创建临时URL
328358
const imageUrl = URL.createObjectURL(file)
329-
330-
// 添加到背景列表的开头
331359
backgrounds.value.unshift(imageUrl)
332-
333360
// 选中新上传的图片
334361
selectedBg.value = 0;
335-
336362
// 清空 input,允许重复上传同一张图片
337363
(event.target as HTMLInputElement).value = ''
338364
}
@@ -346,6 +372,15 @@ function handleSelectFont(item) {
346372
fontFamily.value = item.id
347373
proxy.$reortGaEvent('select-font', 'digest')
348374
}
375+
376+
const handleImageError = (index: number) => {
377+
console.debug(`背景图片 ${index + 1} 加载失败`)
378+
proxy.$reortGaEvent('load-bg-failed', 'digest')
379+
}
380+
381+
const handleImageLoad = (index: number) => {
382+
console.debug(`背景图片 ${index + 1} 加载成功`)
383+
}
349384
</script>
350385

351386
<style scoped>
@@ -357,6 +392,21 @@ input[type="range"]::-webkit-slider-thumb {
357392
@apply appearance-none w-4 h-4 bg-blue-500 rounded-full cursor-pointer;
358393
}
359394
395+
/* 添加闪光动画 */
396+
@keyframes shimmer {
397+
0% {
398+
transform: translateX(-100%);
399+
}
400+
401+
100% {
402+
transform: translateX(100%);
403+
}
404+
}
405+
406+
.animate-shimmer {
407+
animation: shimmer 1.5s infinite;
408+
}
409+
360410
@font-face {
361411
font-family: 'ShouJinTi';
362412
font-style: normal;
@@ -379,4 +429,4 @@ input[type="range"]::-webkit-slider-thumb {
379429
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC&display=swap');
380430
@import url('https://static.zeoseven.com/zsft/440/main/result.css');
381431
@import url('https://static.zeoseven.com/zsft/5/main/result.css');
382-
</style>
432+
</style>

0 commit comments

Comments
 (0)