隐藏封面图

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://hyde.seasir.top/blog/HideCoverImage/
作者
Hyde
发布于
2026-06-03
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Hyde
Hello, I'm Hyde.
📢 欢迎来访者
👋🏻 Hi,我是Hyde,欢迎您!
分类
标签
站点统计
文章
10
分类
2
标签
3
总字数
3,212
运行时长
0
最后活动
0 天前
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
我和宝宝在一起已经
---------TSH ❤️ CXY---------
---------TSH
❤️
CXY---------
0 0 0 0 0 00
✨ 今日一言
" 成功的秘诀在于对目标的执着追求。 "
—— 本杰明·迪斯雷利
统计

文章目录

✨️ 复制成功,转载请标注本文地址