隐藏封面图
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]: "文章封面圖",支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!