fix: 加载中图标修复

This commit is contained in:
coolzr
2025-10-23 23:07:42 +08:00
parent cceb83f9a5
commit 8d4d76184d
3 changed files with 75 additions and 14 deletions

1
.gitignore vendored
View File

@@ -37,3 +37,4 @@ tests/fixtures/
# SpecStory explanation file
.specstory/.what-is-this.md
AGENTS.md

View File

@@ -950,12 +950,71 @@ body .content.expanded {
.site-card .icon-placeholder,
.site-card .icon-fallback {
display: inline-flex;
align-items: center;
justify-content: center;
display: inline-block;
width: 1.8rem;
height: 1.8rem;
margin-bottom: 1rem;
border-radius: 4px;
flex-shrink: 0;
vertical-align: middle;
text-align: center;
line-height: 1.8rem;
font-size: 1.8rem;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
/* 确保图标容器在加载过程中保持固定尺寸 */
.site-card .icon-container {
display: inline-block;
width: 1.8rem;
height: 1.8rem;
margin-bottom: 1rem;
position: relative;
vertical-align: middle;
}
.site-card .icon-container .favicon-icon,
.site-card .icon-container .icon-placeholder,
.site-card .icon-container .icon-fallback {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin-bottom: 0;
}
/* 优化图标切换动画 */
.site-card .icon-container .favicon-icon {
opacity: 0;
transition: opacity 0.3s ease;
}
.site-card .icon-container .favicon-icon.loaded {
opacity: 1;
}
.site-card .icon-container .favicon-icon.error {
display: none;
}
.site-card .icon-container .icon-placeholder {
opacity: 1;
transition: opacity 0.3s ease;
}
.site-card .icon-container .icon-placeholder.hidden {
opacity: 0;
pointer-events: none;
}
.site-card .icon-container .icon-fallback {
opacity: 0;
transition: opacity 0.3s ease;
}
.site-card .icon-container .icon-fallback.visible {
opacity: 1;
}
.site-card:hover i {

View File

@@ -8,17 +8,18 @@
data-description="{{#if description}}{{description}}{{else}}{{url}}{{/if}}">
{{#ifEquals @root.icons.mode "favicon"}}
{{#ifHttpUrl url}}
<div class="icon-container">
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
<img
class="favicon-icon"
src="https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url={{encodeURIComponent url}}&size=32"
alt="{{name}} favicon"
loading="lazy"
style="opacity:0;"
onload="this.style.opacity='1'; this.previousElementSibling.style.display='none';"
onerror="this.style.display='none'; this.previousElementSibling.style.display='none'; this.nextElementSibling.style.display='inline-block';"
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
onerror="this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');"
/>
<i class="fas fa-link icon-fallback" aria-hidden="true" style="display:none;"></i>
<i class="fas fa-link icon-fallback" aria-hidden="true"></i>
</div>
{{else}}
<i class="{{#if icon}}{{icon}}{{else}}fas fa-link{{/if}}"></i>
{{/ifHttpUrl}}