隐藏封面图

661 字
3 分钟
隐藏封面图
文章摘要

添加类型定义#

文件路径:src/types/config.ts

// 文章列表布局配置
postListLayout: {
allowCoverSwitch?: boolean; // 是否允许用户切换文章封面图显示
showCover?: boolean; // 默认是否显示文章封面图
};

添加配置项#

文件路径:src/config/siteConfig.ts

postListLayout: {
allowCoverSwitch: true, // 新增:允许切换封面图显示
showCover: true, // 新增:默认显示封面图
},

设置工具函数#

文件路径:src/utils/setting-utils.ts

// 获取默认封面图显示状态
export function getDefaultPostCoverImageEnabled(): boolean {
return siteConfig.postListLayout.showCover ?? true;
}
// 从localStorage读取封面图显示状态
export function getStoredPostCoverImageEnabled(): boolean {
if (
typeof localStorage === "undefined" ||
typeof localStorage.getItem !== "function"
) {
return getDefaultPostCoverImageEnabled();
}
const stored = localStorage.getItem("postCoverImageEnabled");
if (stored === null) {
return getDefaultPostCoverImageEnabled();
}
return stored === "true";
}
// 设置封面图显示状态
export function setPostCoverImageEnabled(enabled: boolean): void {
if (
typeof localStorage === "undefined" ||
typeof localStorage.setItem !== "function"
) {
return;
}
localStorage.setItem("postCoverImageEnabled", String(enabled));
applyPostCoverImageEnabledToDocument(enabled);
if (typeof window !== "undefined") {
window.dispatchEvent(
new CustomEvent("postCoverImageChange", {
detail: { enabled },
}),
);
}
}
// 将封面图状态应用到文档
export function applyPostCoverImageEnabledToDocument(enabled: boolean): void {
if (typeof document === "undefined") {
return;
}
document.documentElement.setAttribute(
"data-post-cover-enabled",
String(enabled),
);
}

添加设置面板开关#

文件路径:src/components/controls/DisplaySettingsIntegrated.svelte

导入相关函数#

  • 在文件顶部导入新添加的工具函数:
import {
// ... 其他导入
getDefaultPostCoverImageEnabled,
getStoredPostCoverImageEnabled,
setPostCoverImageEnabled,
applyPostCoverImageEnabledToDocument,
} from "@utils/setting-utils";

添加状态变量#

  • 在脚本部分添加以下状态变量:
const defaultPostCoverImageEnabled = getDefaultPostCoverImageEnabled();
const isPostCoverImageSwitchable = siteConfig.postListLayout.allowCoverSwitch ?? true;
let postCoverImageEnabled = $state(true);

添加切换函数#

  • 添加切换封面图状态的函数:数:
function togglePostCoverImageEnabled() {
postCoverImageEnabled = !postCoverImageEnabled;
setPostCoverImageEnabled(postCoverImageEnabled);
}

在 onMount 中初始化状态#

// 从localStorage读取文章封面图状态
postCoverImageEnabled = getStoredPostCoverImageEnabled();
// 将状态应用到文档
applyPostCoverImageEnabledToDocument(postCoverImageEnabled);

添加开关 UI#

  • 在 HTML 模板部分(布局切换区域后)添加:
<!-- Post Cover Image Switch Section -->
{#if isPostCoverImageSwitchable}
<div class="mt-2 mb-2">
<div class="flex gap-2 font-bold text-lg text-neutral-900 dark:text-neutral-100 transition relative ml-3 mb-2
before:w-1 before:h-4 before:rounded-md before:bg-(--primary)
before:absolute before:-left-3 before:top-1/2 before:-translate-y-1/2"
>
{i18n(I18nKey.postCoverImage)}
<button aria-label="Reset to Default" class="btn-regular w-7 h-7 rounded-md active:scale-90"
class:opacity-0={postCoverImageEnabled === defaultPostCoverImageEnabled}
class:pointer-events-none={postCoverImageEnabled === defaultPostCoverImageEnabled}
onclick={() => {
postCoverImageEnabled = defaultPostCoverImageEnabled;
setPostCoverImageEnabled(defaultPostCoverImageEnabled);
}}>
<div class="text-(--btn-content)">
<Icon icon="fa7-solid:arrow-rotate-left" class="text-[0.875rem]"></Icon>
</div>
</button>
</div>
<div class="space-y-1">
<button
class="w-full btn-regular rounded-md py-2 px-3 flex items-center gap-3 text-left active:scale-95 transition-all relative overflow-hidden"
class:bg-(--btn-regular-bg-hover)={postCoverImageEnabled}
onclick={togglePostCoverImageEnabled}
>
<Icon icon="material-symbols:image" class="text-[1.25rem] shrink-0"></Icon>
<span class="text-sm flex-1">{i18n(I18nKey.postCoverImage)}</span>
<div class="w-10 h-5 rounded-full transition-all duration-200 relative"
class:bg-(--primary)={postCoverImageEnabled}
class:bg-(--btn-regular-bg-active)={!postCoverImageEnabled}>
<div class="absolute top-0.5 w-4 h-4 bg-white rounded-full shadow transition-all duration-200"
class:left-0.5={!postCoverImageEnabled}
class:left-5={postCoverImageEnabled}></div>
</div>
</button>
</div>
</div>
{/if}

添加样式控制#

文件路径:src/components/layout/PostCard.astro

/* === Hide Post Cover Image === */
/* 当 data-post-cover-enabled="false" 时隐藏封面图 */
:global([data-post-cover-enabled="false"]) .post-card-image {
display: none !important;
}
:global([data-post-cover-enabled="false"]) .has-cover {
&.post-card-wrapper {
.post-card-content {
width: calc(100% - 52px - 12px) !important;
}
}
}
:global([data-post-cover-enabled="false"]) .has-cover .post-card-enter-btn {
display: flex !important;
}

语言配置#

  • 文件路径:src/i18n/i18nKey.ts
postCoverImage = "postCoverImage",
  • 文件路径:src/i18n/languages/en.ts
[Key.postCoverImage]: "Post Cover Image",
  • 文件路径:src/i18n/languages/ja.ts
[Key.postCoverImage]: "記事のカバー画像",
  • 文件路径:src/i18n/languages/ru.ts
[Key.postCoverImage]: "Обложка поста",
  • 文件路径:src/i18n/languages/zh_CN.ts
[Key.postCoverImage]: "文章封面图",
  • 文件路径:src/i18n/languages/zh_TW.ts
[Key.postCoverImage]: "文章封面圖",

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

隐藏封面图
https://astro.cchaoka.cn/blog/HideCoverImage/
作者
像风
发布于
2026-06-11
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
像风
Hello, I'm 像风.
📢 欢迎来访者
👋🏻 Hi,我是像风,欢迎您!
分类
标签
站点统计
文章
12
分类
2
标签
3
总字数
5,056
运行时长
0
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.14.3
文章许可
CC BY-NC-SA 4.0
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
✨ 今日一言
"做你自己,别人已经有人做了。"
—— 奥斯卡·王尔德
统计
✨️ 复制成功,转载请标注本文地址