Files
blog/posts/ad244066/index.html
2026-02-23 08:41:34 +08:00

639 lines
187 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>配置说说页面 | Bi's Blog</title><meta name="author" content="biss"><meta name="copyright" content="biss"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="又开始折腾啦这次把说说页面加上改用moments项目的api 🪧引用站外地址,不保证站点的可用性和安全性 Moments 极简朋友圈 githun@kingwrcy 前期要求硬件要求 一台服务器 一个可自主解析的域名 软件要求 d">
<meta property="og:type" content="article">
<meta property="og:title" content="配置说说页面">
<meta property="og:url" content="https://blog.biss.click/posts/ad244066/index.html">
<meta property="og:site_name" content="Bi's Blog">
<meta property="og:description" content="又开始折腾啦这次把说说页面加上改用moments项目的api 🪧引用站外地址,不保证站点的可用性和安全性 Moments 极简朋友圈 githun@kingwrcy 前期要求硬件要求 一台服务器 一个可自主解析的域名 软件要求 d">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://pic.biss.click/image/0f3b8150-af77-426f-afc1-36df5ab27b36.webp">
<meta property="article:published_time" content="2025-08-10T00:25:39.000Z">
<meta property="article:modified_time" content="2026-02-23T00:41:17.224Z">
<meta property="article:author" content="biss">
<meta property="article:tag" content="网站">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://pic.biss.click/image/0f3b8150-af77-426f-afc1-36df5ab27b36.webp"><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "配置说说页面",
"url": "https://blog.biss.click/posts/ad244066/",
"image": "https://pic.biss.click/image/0f3b8150-af77-426f-afc1-36df5ab27b36.webp",
"datePublished": "2025-08-10T00:25:39.000Z",
"dateModified": "2026-02-23T00:41:17.224Z",
"author": [
{
"@type": "Person",
"name": "biss",
"url": "https://blog.biss.click"
}
]
}</script><link rel="shortcut icon" href="/images/Bi.ico"><link rel="canonical" href="https://blog.biss.click/posts/ad244066/index.html"><link rel="preconnect" href="//unpkg.com"><link rel="preconnect" href="//busuanzi.ibruce.info"><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://unpkg.com/@fortawesome/fontawesome-free/css/all.min.css"><link rel="stylesheet" href="https://unpkg.com/node-snackbar/dist/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://unpkg.com/@fancyapps/ui/dist/fancybox/fancybox.css" media="print" onload="this.media='all'"><script>
(() => {
const saveToLocal = {
set: (key, value, ttl) => {
if (!ttl) return
const expiry = Date.now() + ttl * 86400000
localStorage.setItem(key, JSON.stringify({ value, expiry }))
},
get: key => {
const itemStr = localStorage.getItem(key)
if (!itemStr) return undefined
const { value, expiry } = JSON.parse(itemStr)
if (Date.now() > expiry) {
localStorage.removeItem(key)
return undefined
}
return value
}
}
window.btf = {
saveToLocal,
getScript: (url, attr = {}) => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
Object.entries(attr).forEach(([key, val]) => script.setAttribute(key, val))
script.onload = script.onreadystatechange = () => {
if (!script.readyState || /loaded|complete/.test(script.readyState)) resolve()
}
script.onerror = reject
document.head.appendChild(script)
}),
getCSS: (url, id) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onload = link.onreadystatechange = () => {
if (!link.readyState || /loaded|complete/.test(link.readyState)) resolve()
}
link.onerror = reject
document.head.appendChild(link)
}),
addGlobalFn: (key, fn, name = false, parent = window) => {
if (!true && key.startsWith('pjax')) return
const globalFn = parent.globalFn || {}
globalFn[key] = globalFn[key] || {}
globalFn[key][name || Object.keys(globalFn[key]).length] = fn
parent.globalFn = globalFn
}
}
const activateDarkMode = () => {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
const activateLightMode = () => {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
btf.activateDarkMode = activateDarkMode
btf.activateLightMode = activateLightMode
const theme = saveToLocal.get('theme')
theme === 'dark' ? activateDarkMode() : theme === 'light' ? activateLightMode() : null
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
document.documentElement.classList.toggle('hide-aside', asideStatus === 'hide')
}
const detectApple = () => {
if (/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)) {
document.documentElement.classList.add('apple')
}
}
detectApple()
})()
</script><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":200,"highlightFullpage":true,"highlightMacStyle":false},
copy: {
success: '复制成功',
error: '复制失败',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: {"chs_to_cht":"已切换为繁体中文","cht_to_chs":"已切换为简体中文","day_to_night":"已切换为深色模式","night_to_day":"已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#1f1f1f","position":"bottom-left"},
infinitegrid: {
js: 'https://unpkg.com/@egjs/infinitegrid/dist/infinitegrid.min.js',
buttonText: '加载更多'
},
isPhotoFigcaption: false,
islazyloadPlugin: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: '配置说说页面',
isHighlightShrink: false,
isToc: true,
pageType: 'post'
}</script><link rel="stylesheet" href="/css/shuoshuo.css"><link rel="stylesheet" href="/css/shuoshuoshouye.css"><link rel="stylesheet" href="/css/nav.css"><link rel="stylesheet" href="/css/style.css"><link rel="stylesheet" href="/css/poem.css"><link rel="stylesheet" href="/css/swiper.css"><link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/instantsearch.css/themes/reset-min.css"><link rel="stylesheet" href="https://cdn.jsdmirror.com/gh/bishshi/welcomemessage/welcome.css"><link rel="stylesheet" href="https://cdn.jsdmirror.com/gh/bishshi/sidecalendar/calendar.css"><link rel="stylesheet" href="https://cdn.jsdmirror.com/gh/bishshi/rightmenu/rightmenu.css"><link rel="stylesheet" href="https://cdn.jsdmirror.com/gh/bishshi/webfont/font.css"><link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/aplayer/dist/APlayer.min.css" media="all" onload="this.media=&quot;all&quot;"><!-- hexo injector head_end start --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.4.5/css/swiper.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn1.tianli0.top/npm/hexo-butterfly-swiper/lib/swiperstyle.css" media="print" onload="this.media='all'"><!-- hexo injector head_end end --><style type="text/css">
.spoiler {
display: inline;
}
p.spoiler {
display: flex;
}
.spoiler a {
pointer-events: none;
}
.spoiler-blur, .spoiler-blur > * {
transition: text-shadow .5s ease;
}
.spoiler .spoiler-blur, .spoiler .spoiler-blur > * {
color: rgba(0, 0, 0, 0);
background-color: rgba(0, 0, 0, 0);
text-shadow: 0 0 10px grey;
cursor: pointer;
}
.spoiler .spoiler-blur:hover, .spoiler .spoiler-blur:hover > * {
text-shadow: 0 0 5px grey;
}
.spoiler-box, .spoiler-box > * {
transition: color .5s ease,
background-color .5s ease;
}
.spoiler .spoiler-box, .spoiler .spoiler-box > * {
color: black;
background-color: black;
text-shadow: none;
}</style><meta name="generator" content="Hexo 8.1.1"><link rel="alternate" href="/atom.xml" title="Bi's Blog" type="application/atom+xml">
</head><body><div class="bg-animation" id="web_bg" style="background-image: url(/images/background.png);"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img text-center"><img src="https://free.picui.cn/free/2025/08/10/689845496a283.png" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"></div><div class="site-data text-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">30</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">10</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">5</div></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 存档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/shuoshuo/"><i class="fa-fw fa-regular fa-comment"></i><span> 说说</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div></div></div><div class="post" id="body-wrap"><header class="post-bg fixed" id="page-header" style="background-image: url(https://pic.biss.click/image/0f3b8150-af77-426f-afc1-36df5ab27b36.webp);"><nav id="nav"><span id="blog-info"><div id="ls-menu-container"><i class="fas fa-fingerprint"></i><div id="ls-menu-panel"><div class="ls-section"><div class="ls-title">😀 个人网站</div><div class="ls-grid"><a href="/"><i class="fas fa-rss"></i> 个人博客</a><a target="_blank" rel="noopener" href="https://github.com/bishshi"><i class="fab fa-github"></i> Github</a></div></div><div class="ls-section"><div class="ls-title">😎 常用服务</div><div class="ls-grid"><a target="_blank" rel="noopener" href="https://git.biss.click/biss"><i class="fas fa-code"></i> 代码仓库</a><a target="_blank" rel="noopener" href="https://mm.biss.click"><i class="fas fa-pen-nib"></i> 日常yy</a><a target="_blank" rel="noopener" href="https://statstic.biss.click"><i class="fas fa-users"></i> 访客统计</a><a target="_blank" rel="noopener" href="https://pic.biss.click"><i class="fas fa-image"></i> 图床</a><a target="_blank" rel="noopener" href="https://chat.biss.click"><i class="fas fa-robot"></i> AI网站</a><a target="_blank" rel="noopener" href="https://git.biss.click"><i class="fas fa-code-branch"></i> 代码仓库</a></div></div><div class="ls-section"><div class="ls-title">🛸 实用工具</div><div class="ls-grid"><a target="_blank" rel="noopener" href="https://cover.biss.click"><i class="fas fa-palette"></i> 封面设计</a><a target="_blank" rel="noopener" href="https://doc.biss.click"><i class="fas fa-file"></i> 文档服务</a><a target="_blank" rel="noopener" href="https://doc.biss.click"><i class="fas fa-server"></i>服务监测</a><a target="_blank" rel="noopener" href="https://typesense.biss.click"><i class="fas fa-magnifying-glass"></i> 搜索后端</a></div></div></div></div><a class="nav-site-title" href="/"><span class="site-name">Bi's Blog</span></a></span><a class="nav-page-title" href="javascript:void(0);" onclick="btf.scrollToDest(0, 500)"><span class="site-name">配置说说页面</span></a><div id="nav-right"><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 存档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/shuoshuo/"><i class="fa-fw fa-regular fa-comment"></i><span> 说说</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div></div><div id="random-post-button"><a class="site-page social-icon" id="random-post-link" href="javascript:void(0);" onclick="randomPost()"><i class="fas fa-solid fa-shuffle"></i></a></div><div id="search-button"><a class="site-page social-icon search-typesense-trigger"><i class="fas fa-search fa-fw"></i></a></div><div id="toggle-menu"><span class="site-page"><i class="fas fa-bars fa-fw"></i></span></div></div></nav><div id="post-info"><h1 class="post-title">配置说说页面</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">发表于</span><time class="post-meta-date-created" datetime="2025-08-10T00:25:39.000Z" title="发表于 2025-08-10 08:25:39">2025-08-10</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2026-02-23T00:41:17.224Z" title="更新于 2026-02-23 08:41:17">2026-02-23</time></span><span class="post-meta-categories"><span class="post-meta-separator">|</span><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/categories/website/">建站手札</a></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-wordcount"><i class="far fa-file-word fa-fw post-meta-icon"></i><span class="post-meta-label">总字数:</span><span class="word-count">5.4k</span><span class="post-meta-separator">|</span><i class="far fa-clock fa-fw post-meta-icon"></i><span class="post-meta-label">阅读时长:</span><span>28分钟</span></span><span class="post-meta-separator">|</span><span id="" data-flag-title=""><i class="far fa-eye fa-fw post-meta-icon"></i><span class="post-meta-label">浏览量:</span><span id="twikoo_visitors"><i class="fa-solid fa-spinner fa-spin"></i></span></span></div></div></div></header><main class="layout" id="content-inner"><div id="post"><article class="container post-content" id="article-container"><div class="ai-summary"><div class="ai-explanation" style="display: block;" data-summary="这段文字看起来是一个部署教程主要是关于如何在服务器上部署一个名为“Moments”的应用并将其与网站集成。以下是对这段文字的概括 1. 介绍了硬件和软件的要求包括服务器、域名、Docker环境和反向代理工具如Nginx。 2. 提供了Moments应用的部署方法包括使用docker-compose进行部署和配置Nginx反向代理。 3. 介绍了如何在前端集成Moments应用包括引入必要的CSS和JS文件以及创建一个新的页面来显示Moments的内容。 需要注意的是,这段文字中的一些链接和代码可能已经过时或者不适用于所有场景,建议在实际操作时参考最新的官方">AI正在绞尽脑汁想思路ING···</div><div class="ai-title"> <div class="ai-title-left"> <i class="fa-brands fa-slack"></i><div class="ai-title-text">BiのAI摘要</div></div><div class="ai-tag" id="ai-tag">HunYuan-Lite</div></div></div><div id="post-outdate-notice" data="{&quot;limitDay&quot;:365,&quot;messagePrev&quot;:&quot;It has been&quot;,&quot;messageNext&quot;:&quot;days since the last update, the content of the article may be outdated.&quot;,&quot;postUpdate&quot;:&quot;2026-02-23 08:41:17&quot;}" hidden=""></div><p>又开始折腾啦这次把说说页面加上改用moments项目的api</p>
<div class="liushen-tag-link"><a class="tag-Link" target="_blank" href="/go.html?u=aHR0cHM6Ly9naXRodWIuY29tL2tpbmd3cmN5L21vbWVudHM" rel="external nofollow noopener noreferrer">
<div class="tag-link-tips">🪧引用站外地址,不保证站点的可用性和安全性</div>
<div class="tag-link-bottom">
<div class="tag-link-left" style="background-image: url(https://pic.biss.click/image/ed410d4e-d3f8-4b26-8840-50dd58f7dc4e.webp);"></div>
<div class="tag-link-right">
<div class="tag-link-title">Moments 极简朋友圈</div>
<div class="tag-link-sitename">githun@kingwrcy</div>
</div>
<i class="fa-solid fa-angle-right"></i>
</div>
</a></div>
<h1 id="前期要求"><a href="#前期要求" class="headerlink" title="前期要求"></a>前期要求</h1><h2 id="硬件要求"><a href="#硬件要求" class="headerlink" title="硬件要求"></a>硬件要求</h2><ol>
<li>一台服务器</li>
<li>一个可自主解析的域名</li>
</ol>
<h2 id="软件要求"><a href="#软件要求" class="headerlink" title="软件要求"></a>软件要求</h2><ol>
<li>docker环境</li>
<li>反向代理工具本文以Nginx为例</li>
</ol>
<h1 id="介绍与展示"><a href="#介绍与展示" class="headerlink" title="介绍与展示"></a>介绍与展示</h1><p>这里先给大家展示一下最终的效果,注意该教程可能仅适合部分主题,如果出现主题不适配的情况请自行适配,这里以本站主题 <code>Hexo-theme-butterfly</code>为基础进行修改:</p>
<ol>
<li>说说页面:<div class="liushen-tag-link"><a class="tag-Link" target="_blank" href="https://blog.biss.click">
<div class="tag-link-tips">✅来自本站,本站可确保其安全性,请放心点击跳转</div>
<div class="tag-link-bottom">
<div class="tag-link-left" style="background-image: url(https://pic.biss.click/image/1971bdc1-4349-4bb9-b683-20404f5da7d7.webp);"></div>
<div class="tag-link-right">
<div class="tag-link-title">我的说说</div>
<div class="tag-link-sitename">胡言乱语ing。。。</div>
</div>
<i class="fa-solid fa-angle-right"></i>
</div>
</a></div></li>
<li>轻量朋友圈<div class="liushen-tag-link"><a class="tag-Link" target="_blank" href="/go.html?u=aHR0cHM6Ly9tbS5iaXNzLmJsb2c" rel="external nofollow noopener noreferrer">
<div class="tag-link-tips">🪧引用站外地址,不保证站点的可用性和安全性</div>
<div class="tag-link-bottom">
<div class="tag-link-left" style="background-image: url(https://pic.biss.click/image/1971bdc1-4349-4bb9-b683-20404f5da7d7.webp);"></div>
<div class="tag-link-right">
<div class="tag-link-title">朋友圈</div>
<div class="tag-link-sitename">依旧胡言乱语</div>
</div>
<i class="fa-solid fa-angle-right"></i>
</div>
</a></div></li>
<li>功能说明</li>
</ol>
<p>Moments作为一个轻量朋友圈其功能都是分享上的部分如下所示</p>
<ul>
<li>分享:链接,图片,音乐,视频,书籍,电影</li>
<li>信息:自定义位置,自定义标签,是否公开</li>
<li>页面Markdown渲染编辑说说删除说说暗夜模式自定义图标信息CSS及JS代码</li>
<li>功能S3存储文件查询多用户注册点赞评论API</li>
</ul>
<p>简单介绍完毕,下面我就来教大家如何进行部署!</p>
<h1 id="部署教程"><a href="#部署教程" class="headerlink" title="部署教程"></a>部署教程</h1><h2 id="Moments部署"><a href="#Moments部署" class="headerlink" title="Moments部署"></a>Moments部署</h2><h3 id="Compose部署"><a href="#Compose部署" class="headerlink" title="Compose部署"></a>Compose部署</h3><p>官方给予了很完善的教程,这里我仅仅简单介绍一下 <code>docker-compose</code>部署的方式,如果你想以源码等其他方式进行部署,请查看文章开头部分的 <code>github</code>地址进行查阅。</p>
<p>首先,在服务器任意位置创建文件:<code>docker-compose.yaml</code>,填入以下内容:</p>
<figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">version: <span class="string">'3'</span></span><br><span class="line">services:</span><br><span class="line"> moments:</span><br><span class="line"> image: kingwrcy/moments:latest</span><br><span class="line"> container_name: moments</span><br><span class="line"> restart: always</span><br><span class="line"> environment:</span><br><span class="line"> port: 3000</span><br><span class="line"> JWT_KEY: <span class="string">"自己随便生成点字符串"</span></span><br><span class="line"> ENABLE_SWAGGER: <span class="string">"true"</span></span><br><span class="line"> CORS_ORIGIN: <span class="comment"># 填写跨域域名</span></span><br><span class="line"> ports:</span><br><span class="line"> - <span class="string">"3000:3000"</span> <span class="comment"># 自行换端口换前面的后面的3000不要动</span></span><br><span class="line"> volumes:</span><br><span class="line"> - ./opt/data:/app/data</span><br><span class="line"> <span class="comment"># - ./data/localtime:/etc/localtime:ro</span></span><br><span class="line"> <span class="comment"># - ./data/timezone:/etc/timezone:ro</span></span><br></pre></td></tr></tbody></table></figure>
<p>注意文件,我将 <code>/opt/</code>文件夹(当然可以改成其他的)下的 <code>/data</code>文件夹挂载了进去,数据都会在里面,迁移时仅需整体打包到新服务器即可。然后执行以下两条命令,后续需要升级也仅需要执行这两个命令:</p>
<figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker-compose pull</span><br><span class="line">docker-compose up -d</span><br></pre></td></tr></tbody></table></figure>
<p>如果网络环境不佳,可尝试替换 <code>docker</code>源,可以自行查找</p>
<p>通过反向代理将其添加到某个域名中,这里就不再多说了,各大面板都有极其完备的反代文档。</p>
<h3 id="Nginx修改"><a href="#Nginx修改" class="headerlink" title="Nginx修改"></a>Nginx修改</h3><p><code>Moments</code>在跨域 <code>docker-compose</code>文件中可以配置,所以不必进行此步</p>
<p>网站目录</p>
<p>返回到上一级目录,也就是域名名称的文件夹下,找到 <code>Proxy</code>文件夹,编辑里面的 <code>root.conf</code>文件为如下内容:</p>
<figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#代理配置</span></span><br><span class="line"></span><br><span class="line">location / {</span><br><span class="line"> <span class="comment"># 跨域设置</span></span><br><span class="line"> add_header Access-Control-Allow-Origin *; <span class="comment"># 允许所有域名访问,你也可以指定具体域名</span></span><br><span class="line"> add_header Access-Control-Allow-Methods <span class="string">'GET, POST, PUT, DELETE, OPTIONS'</span>; <span class="comment"># 允许的 HTTP 方法</span></span><br><span class="line"> add_header Access-Control-Allow-Headers <span class="string">'Origin, X-Requested-With, Content-Type, Accept, Authorization'</span>; <span class="comment"># 允许的请求头</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># 处理 OPTIONS 请求,预检请求</span></span><br><span class="line"> <span class="keyword">if</span> (<span class="variable">$request_method</span> = <span class="string">'OPTIONS'</span>) {</span><br><span class="line"> add_header Access-Control-Allow-Origin *;</span><br><span class="line"> add_header Access-Control-Allow-Methods <span class="string">'GET, POST, PUT, DELETE, OPTIONS'</span>;</span><br><span class="line"> add_header Access-Control-Allow-Headers <span class="string">'Origin, X-Requested-With, Content-Type, Accept, Authorization'</span>;</span><br><span class="line"> add_header Access-Control-Max-Age 1728000;</span><br><span class="line"> add_header Content-Type <span class="string">'text/plain charset=UTF-8'</span>;</span><br><span class="line"> add_header Content-Length 0;</span><br><span class="line"> <span class="built_in">return</span> 204;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment"># 原代理设置</span></span><br><span class="line"> proxy_pass http://127.0.0.1:3003;</span><br><span class="line"> proxy_set_header Host <span class="variable">$host</span>;</span><br><span class="line"> proxy_set_header X-Real-IP <span class="variable">$remote_addr</span>;</span><br><span class="line"> proxy_set_header X-Forwarded-For <span class="variable">$proxy_add_x_forwarded_for</span>;</span><br><span class="line"> proxy_set_header REMOTE-HOST <span class="variable">$remote_addr</span>;</span><br><span class="line"> proxy_set_header Upgrade <span class="variable">$http_upgrade</span>;</span><br><span class="line"> proxy_set_header Connection <span class="variable">$http_connection</span>;</span><br><span class="line"> proxy_set_header X-Forwarded-Proto <span class="variable">$scheme</span>;</span><br><span class="line"> proxy_http_version 1.1;</span><br><span class="line"> add_header X-Cache <span class="variable">$upstream_cache_status</span>;</span><br><span class="line"> add_header Cache-Control no-cache;</span><br><span class="line"> proxy_ssl_server_name off;</span><br><span class="line"> proxy_ssl_name <span class="variable">$proxy_host</span>;</span><br><span class="line"> add_header Strict-Transport-Security <span class="string">"max-age=31536000"</span>;</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure>
<p>下面是原代理设置,可以仅仅复制上面部分内容,下面保持不变,注意端口不要出问题。</p>
<h2 id="前端实现"><a href="#前端实现" class="headerlink" title="前端实现"></a>前端实现</h2><p>由于该项目利用了MetingJS和APlayer所以请提前引入这两个包Hexo-theme-butterfly中虽然有内置的两个包仅需修改配置文件即可开启但是版本比较老这里我建议自行引入最新版本在配置中引入以下文件注意css和js应该是分开引入的</p>
<figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;<span class="built_in">link</span> rel=<span class="string">"stylesheet"</span> href=<span class="string">"https://fastly.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"</span> media=<span class="string">"all"</span> onload=<span class="string">"this.media="</span>all<span class="string">""</span>&gt;</span><br><span class="line">&lt;script src=<span class="string">"https://fastly.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"</span>&gt;&lt;/script&gt;</span><br><span class="line">&lt;script src=<span class="string">"https://fastly.jsdelivr.net/npm/meting/dist/Meting.min.js"</span>&gt;&lt;/script&gt;</span><br></pre></td></tr></tbody></table></figure>
<p>新建页面shuoshuo在文件内写入一下内容</p>
<figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 日常哔哔,键盘侠的日常吐槽</span><br><span class="line">aside: <span class="literal">false</span></span><br><span class="line">---</span><br><span class="line">&lt;div <span class="built_in">id</span>=<span class="string">"talk"</span>&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=<span class="string">"limit"</span>&gt;- 只展示最近30条说说 -&lt;/div&gt;</span><br><span class="line">&lt;script src=<span class="string">"/js/shuoshuo.js"</span> no-pjax&gt;&lt;/script&gt;</span><br></pre></td></tr></tbody></table></figure>
<p>其中的JS文件地址清自行修改放在主题目录 <code>/script/</code>目录,自行创建,并写入以下内容:</p>
<figure class="highlight js"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">renderTalks</span>(<span class="params"></span>) {</span><br><span class="line"> <span class="keyword">const</span> talkContainer = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#talk'</span>);</span><br><span class="line"> <span class="keyword">const</span> domain = <span class="string">'https://mm.biss.click'</span>; </span><br><span class="line"> <span class="keyword">if</span> (!talkContainer) <span class="keyword">return</span>;</span><br><span class="line"> talkContainer.<span class="property">innerHTML</span> = <span class="string">''</span>;</span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">generateIconSVG</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">`&lt;svg viewBox="0 0 512 512"xmlns="http://www.w3.org/2000/svg"class="is-badge icon"&gt;&lt;path d="m512 268c0 17.9-4.3 34.5-12.9 49.7s-20.1 27.1-34.6 35.4c.4 2.7.6 6.9.6 12.6 0 27.1-9.1 50.1-27.1 69.1-18.1 19.1-39.9 28.6-65.4 28.6-11.4 0-22.3-2.1-32.6-6.3-8 16.4-19.5 29.6-34.6 39.7-15 10.2-31.5 15.2-49.4 15.2-18.3 0-34.9-4.9-49.7-14.9-14.9-9.9-26.3-23.2-34.3-40-10.3 4.2-21.1 6.3-32.6 6.3-25.5 0-47.4-9.5-65.7-28.6-18.3-19-27.4-42.1-27.4-69.1 0-3 .4-7.2 1.1-12.6-14.5-8.4-26-20.2-34.6-35.4-8.5-15.2-12.8-31.8-12.8-49.7 0-19 4.8-36.5 14.3-52.3s22.3-27.5 38.3-35.1c-4.2-11.4-6.3-22.9-6.3-34.3 0-27 9.1-50.1 27.4-69.1s40.2-28.6 65.7-28.6c11.4 0 22.3 2.1 32.6 6.3 8-16.4 19.5-29.6 34.6-39.7 15-10.1 31.5-15.2 49.4-15.2s34.4 5.1 49.4 15.1c15 10.1 26.6 23.3 34.6 39.7 10.3-4.2 21.1-6.3 32.6-6.3 25.5 0 47.3 9.5 65.4 28.6s27.1 42.1 27.1 69.1c0 12.6-1.9 24-5.7 34.3 16 7.6 28.8 19.3 38.3 35.1 9.5 15.9 14.3 33.4 14.3 52.4zm-266.9 77.1 105.7-158.3c2.7-4.2 3.5-8.8 2.6-13.7-1-4.9-3.5-8.8-7.7-11.4-4.2-2.7-8.8-3.6-13.7-2.9-5 .8-9 3.2-12 7.4l-93.1 140-42.9-42.8c-3.8-3.8-8.2-5.6-13.1-5.4-5 .2-9.3 2-13.1 5.4-3.4 3.4-5.1 7.7-5.1 12.9 0 5.1 1.7 9.4 5.1 12.9l58.9 58.9 2.9 2.3c3.4 2.3 6.9 3.4 10.3 3.4 6.7-.1 11.8-2.9 15.2-8.7z"fill="#1da1f2"&gt;&lt;/path&gt;&lt;/svg&gt;`</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">waterfall</span> = (<span class="params">a</span>) =&gt; {</span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">b</span>(<span class="params">a, b</span>) {</span><br><span class="line"> <span class="keyword">var</span> c = <span class="variable language_">window</span>.<span class="title function_">getComputedStyle</span>(b);</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">parseFloat</span>(c[<span class="string">"margin"</span> + a]) || <span class="number">0</span></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">c</span>(<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> a + <span class="string">"px"</span></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">d</span>(<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">parseFloat</span>(a.<span class="property">style</span>.<span class="property">top</span>)</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">e</span>(<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">parseFloat</span>(a.<span class="property">style</span>.<span class="property">left</span>)</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">f</span>(<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> a.<span class="property">clientWidth</span></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">g</span>(<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> a.<span class="property">clientHeight</span></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">h</span>(<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">d</span>(a) + <span class="title function_">g</span>(a) + <span class="title function_">b</span>(<span class="string">"Bottom"</span>, a)</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">i</span>(<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">e</span>(a) + <span class="title function_">f</span>(a) + <span class="title function_">b</span>(<span class="string">"Right"</span>, a)</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">j</span>(<span class="params">a</span>) {</span><br><span class="line"> a = a.<span class="title function_">sort</span>(<span class="keyword">function</span> (<span class="params">a, b</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">h</span>(a) === <span class="title function_">h</span>(b) ? <span class="title function_">e</span>(b) - <span class="title function_">e</span>(a) : <span class="title function_">h</span>(b) - <span class="title function_">h</span>(a)</span><br><span class="line"> })</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">k</span>(<span class="params">b</span>) {</span><br><span class="line"> <span class="title function_">f</span>(a) != t &amp;&amp; (b.<span class="property">target</span>.<span class="title function_">removeEventListener</span>(b.<span class="property">type</span>, <span class="variable language_">arguments</span>.<span class="property">callee</span>), <span class="title function_">waterfall</span>(a))</span><br><span class="line"> }</span><br><span class="line"> <span class="string">"string"</span> == <span class="keyword">typeof</span> a &amp;&amp; (a = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(a));</span><br><span class="line"> <span class="keyword">var</span> l = [].<span class="property">map</span>.<span class="title function_">call</span>(a.<span class="property">children</span>, <span class="keyword">function</span> (<span class="params">a</span>) {</span><br><span class="line"> <span class="keyword">return</span> a.<span class="property">style</span>.<span class="property">position</span> = <span class="string">"absolute"</span>, a</span><br><span class="line"> });</span><br><span class="line"> a.<span class="property">style</span>.<span class="property">position</span> = <span class="string">"relative"</span>;</span><br><span class="line"> <span class="keyword">var</span> m = [];</span><br><span class="line"> l.<span class="property">length</span> &amp;&amp; (l[<span class="number">0</span>].<span class="property">style</span>.<span class="property">top</span> = <span class="string">"0px"</span>, l[<span class="number">0</span>].<span class="property">style</span>.<span class="property">left</span> = <span class="title function_">c</span>(<span class="title function_">b</span>(<span class="string">"Left"</span>, l[<span class="number">0</span>])), m.<span class="title function_">push</span>(l[<span class="number">0</span>]));</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">var</span> n = <span class="number">1</span>; n &lt; l.<span class="property">length</span>; n++) {</span><br><span class="line"> <span class="keyword">var</span> o = l[n - <span class="number">1</span>],</span><br><span class="line"> p = l[n],</span><br><span class="line"> q = <span class="title function_">i</span>(o) + <span class="title function_">f</span>(p) &lt;= <span class="title function_">f</span>(a);</span><br><span class="line"> <span class="keyword">if</span> (!q) <span class="keyword">break</span>;</span><br><span class="line"> p.<span class="property">style</span>.<span class="property">top</span> = o.<span class="property">style</span>.<span class="property">top</span>, p.<span class="property">style</span>.<span class="property">left</span> = <span class="title function_">c</span>(<span class="title function_">i</span>(o) + <span class="title function_">b</span>(<span class="string">"Left"</span>, p)), m.<span class="title function_">push</span>(p)</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (; n &lt; l.<span class="property">length</span>; n++) {</span><br><span class="line"> <span class="title function_">j</span>(m);</span><br><span class="line"> <span class="keyword">var</span> p = l[n],</span><br><span class="line"> r = m.<span class="title function_">pop</span>();</span><br><span class="line"> p.<span class="property">style</span>.<span class="property">top</span> = <span class="title function_">c</span>(<span class="title function_">h</span>(r) + <span class="title function_">b</span>(<span class="string">"Top"</span>, p)), p.<span class="property">style</span>.<span class="property">left</span> = <span class="title function_">c</span>(<span class="title function_">e</span>(r)), m.<span class="title function_">push</span>(p)</span><br><span class="line"> }</span><br><span class="line"> <span class="title function_">j</span>(m);</span><br><span class="line"> <span class="keyword">var</span> s = m[<span class="number">0</span>];</span><br><span class="line"> a.<span class="property">style</span>.<span class="property">height</span> = <span class="title function_">c</span>(<span class="title function_">h</span>(s) + <span class="title function_">b</span>(<span class="string">"Bottom"</span>, s));</span><br><span class="line"> <span class="keyword">var</span> t = <span class="title function_">f</span>(a);</span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">addEventListener</span> ? <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">"resize"</span>, k) : <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">onresize</span> = k</span><br><span class="line"> };</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">fetchAndRenderTalks</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line"> <span class="keyword">const</span> url = <span class="string">'https://mm.biss.click/api/memo/list'</span>;</span><br><span class="line"> <span class="keyword">const</span> cacheKey = <span class="string">'talksCache'</span>;</span><br><span class="line"> <span class="keyword">const</span> cacheTimeKey = <span class="string">'talksCacheTime'</span>;</span><br><span class="line"> <span class="keyword">const</span> cacheDuration = <span class="number">30</span> * <span class="number">60</span> * <span class="number">1000</span>; <span class="comment">// 半个小时 (30 分钟)</span></span><br><span class="line"> </span><br><span class="line"> <span class="keyword">const</span> cachedData = <span class="variable language_">localStorage</span>.<span class="title function_">getItem</span>(cacheKey);</span><br><span class="line"> <span class="keyword">const</span> cachedTime = <span class="variable language_">localStorage</span>.<span class="title function_">getItem</span>(cacheTimeKey);</span><br><span class="line"> <span class="keyword">const</span> currentTime = <span class="keyword">new</span> <span class="title class_">Date</span>().<span class="title function_">getTime</span>();</span><br><span class="line"> </span><br><span class="line"> <span class="comment">// 判断缓存是否有效</span></span><br><span class="line"> <span class="keyword">if</span> (cachedData &amp;&amp; cachedTime &amp;&amp; (currentTime - cachedTime &lt; cacheDuration)) {</span><br><span class="line"> <span class="keyword">const</span> data = <span class="title class_">JSON</span>.<span class="title function_">parse</span>(cachedData);</span><br><span class="line"> <span class="title function_">renderTalks</span>(data); <span class="comment">// 使用缓存渲染数据</span></span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">if</span> (talkContainer) {</span><br><span class="line"> talkContainer.<span class="property">innerHTML</span> = <span class="string">''</span>;</span><br><span class="line"> <span class="title function_">fetch</span>(url, {</span><br><span class="line"> <span class="attr">method</span>: <span class="string">'POST'</span>,</span><br><span class="line"> <span class="attr">headers</span>: {</span><br><span class="line"> <span class="string">'Content-Type'</span>: <span class="string">'application/json'</span>,</span><br><span class="line"> },</span><br><span class="line"> <span class="attr">body</span>: <span class="title class_">JSON</span>.<span class="title function_">stringify</span>({</span><br><span class="line"> <span class="attr">size</span>: <span class="number">30</span></span><br><span class="line"> })</span><br><span class="line"> })</span><br><span class="line"> .<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> res.<span class="title function_">json</span>())</span><br><span class="line"> .<span class="title function_">then</span>(<span class="function"><span class="params">data</span> =&gt;</span> {</span><br><span class="line"> <span class="keyword">if</span> (data.<span class="property">code</span> === <span class="number">0</span> &amp;&amp; data.<span class="property">data</span> &amp;&amp; <span class="title class_">Array</span>.<span class="title function_">isArray</span>(data.<span class="property">data</span>.<span class="property">list</span>)) {</span><br><span class="line"> <span class="comment">// 缓存数据</span></span><br><span class="line"> <span class="variable language_">localStorage</span>.<span class="title function_">setItem</span>(cacheKey, <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(data.<span class="property">data</span>.<span class="property">list</span>));</span><br><span class="line"> <span class="variable language_">localStorage</span>.<span class="title function_">setItem</span>(cacheTimeKey, currentTime.<span class="title function_">toString</span>());</span><br><span class="line"> <span class="title function_">renderTalks</span>(data.<span class="property">data</span>.<span class="property">list</span>); <span class="comment">// 渲染数据</span></span><br><span class="line"> }</span><br><span class="line"> })</span><br><span class="line"> .<span class="title function_">catch</span>(<span class="function"><span class="params">error</span> =&gt;</span> {</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(<span class="string">'Error fetching data:'</span>, error);</span><br><span class="line"> });</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="comment">// 渲染函数</span></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">renderTalks</span>(<span class="params">list</span>) {</span><br><span class="line"> <span class="comment">// 确保 data 是一个数组</span></span><br><span class="line"> <span class="keyword">if</span> (<span class="title class_">Array</span>.<span class="title function_">isArray</span>(list)) {</span><br><span class="line"> <span class="keyword">let</span> items = list.<span class="title function_">map</span>(<span class="function"><span class="params">item</span> =&gt;</span> <span class="title function_">formatTalk</span>(item, url));</span><br><span class="line"> items.<span class="title function_">forEach</span>(<span class="function"><span class="params">item</span> =&gt;</span> talkContainer.<span class="title function_">appendChild</span>(<span class="title function_">generateTalkElement</span>(item)));</span><br><span class="line"> <span class="title function_">waterfall</span>(<span class="string">'#talk'</span>);</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(<span class="string">'Data is not an array:'</span>, list);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> };</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">formatTalk</span> = (<span class="params">item, url</span>) =&gt; {</span><br><span class="line"> <span class="keyword">let</span> date = <span class="title function_">formatTime</span>(<span class="keyword">new</span> <span class="title class_">Date</span>(item.<span class="property">createdAt</span>).<span class="title function_">toString</span>());</span><br><span class="line"> <span class="keyword">let</span> content = item.<span class="property">content</span>;</span><br><span class="line"> <span class="keyword">let</span> imgs = item.<span class="property">imgs</span> ? item.<span class="property">imgs</span>.<span class="title function_">split</span>(<span class="string">','</span>) : [];</span><br><span class="line"> <span class="keyword">let</span> text = content;</span><br><span class="line"> content = text.<span class="title function_">replace</span>(<span class="regexp">/\[(.*?)\]\((.*?)\)/g</span>, <span class="string">`&lt;a href="$2"&gt;@$1&lt;/a&gt;`</span>)</span><br><span class="line"> .<span class="title function_">replace</span>(<span class="regexp">/- \[ \]/g</span>, <span class="string">'⚪'</span>)</span><br><span class="line"> .<span class="title function_">replace</span>(<span class="regexp">/- \[x\]/g</span>, <span class="string">'⚫'</span>);</span><br><span class="line"> <span class="comment">// 保留换行符,转换 \n 为 &lt;br&gt;</span></span><br><span class="line"> content = content.<span class="title function_">replace</span>(<span class="regexp">/\n/g</span>, <span class="string">'&lt;br&gt;'</span>);</span><br><span class="line"> <span class="comment">// 将content用一个类包裹便于后续处理</span></span><br><span class="line"> content = <span class="string">`&lt;div class="talk_content_text"&gt;<span class="subst">${content}</span>&lt;/div&gt;`</span>;</span><br><span class="line"> <span class="keyword">if</span> (imgs.<span class="property">length</span> &gt; <span class="number">0</span>) {</span><br><span class="line"> <span class="keyword">const</span> imgDiv = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>);</span><br><span class="line"> imgDiv.<span class="property">className</span> = <span class="string">'zone_imgbox'</span>;</span><br><span class="line"> imgs.<span class="title function_">forEach</span>(<span class="function"><span class="params">e</span> =&gt;</span> {</span><br><span class="line"> <span class="keyword">const</span> imgLink = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'a'</span>);</span><br><span class="line"> <span class="keyword">const</span> imgUrl = domain + e;</span><br><span class="line"> imgLink.<span class="property">href</span> = imgUrl;</span><br><span class="line"> imgLink.<span class="title function_">setAttribute</span>(<span class="string">'data-fancybox'</span>, <span class="string">'gallery'</span>);</span><br><span class="line"> imgLink.<span class="property">className</span> = <span class="string">'fancybox'</span>;</span><br><span class="line"> imgLink.<span class="title function_">setAttribute</span>(<span class="string">'data-thumb'</span>, e);</span><br><span class="line"> <span class="keyword">const</span> imgTag = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'img'</span>);</span><br><span class="line"> imgTag.<span class="property">src</span> = domain + e;</span><br><span class="line"> imgLink.<span class="title function_">appendChild</span>(imgTag);</span><br><span class="line"> imgDiv.<span class="title function_">appendChild</span>(imgLink);</span><br><span class="line"> });</span><br><span class="line"> content += imgDiv.<span class="property">outerHTML</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 外链分享功能</span></span><br><span class="line"> <span class="keyword">if</span> (item.<span class="property">externalUrl</span>) {</span><br><span class="line"> <span class="keyword">const</span> externalUrl = item.<span class="property">externalUrl</span>;</span><br><span class="line"> <span class="keyword">const</span> externalTitle = item.<span class="property">externalTitle</span>;</span><br><span class="line"> <span class="keyword">const</span> externalFavicon = item.<span class="property">externalFavicon</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> externalContainer = <span class="string">`</span></span><br><span class="line"><span class="string"> &lt;div class="shuoshuo-external-link"&gt;</span></span><br><span class="line"><span class="string"> &lt;a class="external-link" href="<span class="subst">${externalUrl}</span>" target="_blank" rel="external nofollow noopener noreferrer"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="external-link-left" style="background-image: url(<span class="subst">${externalFavicon}</span>)"&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="external-link-right"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="external-link-title"&gt;<span class="subst">${externalTitle}</span>&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div&gt;点击跳转&lt;i class="fa-solid fa-angle-right"&gt;&lt;/i&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/a&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;`</span>;</span><br><span class="line"></span><br><span class="line"> content += externalContainer;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> ext = <span class="title class_">JSON</span>.<span class="title function_">parse</span>(item.<span class="property">ext</span> || <span class="string">'{}'</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (ext.<span class="property">music</span> &amp;&amp; ext.<span class="property">music</span>.<span class="property">id</span>) {</span><br><span class="line"> <span class="keyword">const</span> music = ext.<span class="property">music</span>;</span><br><span class="line"> <span class="keyword">const</span> musicUrl = music.<span class="property">api</span>.<span class="title function_">replace</span>(<span class="string">':server'</span>, music.<span class="property">server</span>)</span><br><span class="line"> .<span class="title function_">replace</span>(<span class="string">':type'</span>, music.<span class="property">type</span>)</span><br><span class="line"> .<span class="title function_">replace</span>(<span class="string">':id'</span>, music.<span class="property">id</span>);</span><br><span class="line"> content += <span class="string">`</span></span><br><span class="line"><span class="string"> &lt;meting-js server="<span class="subst">${music.server}</span>" type="<span class="subst">${music.type}</span>" id="<span class="subst">${music.id}</span>" api="<span class="subst">${music.api}</span>"&gt;&lt;/meting-js&gt;</span></span><br><span class="line"><span class="string"> `</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (ext.<span class="property">doubanMovie</span> &amp;&amp; ext.<span class="property">doubanMovie</span>.<span class="property">id</span>) {</span><br><span class="line"> <span class="keyword">const</span> doubanMovie = ext.<span class="property">doubanMovie</span>;</span><br><span class="line"> <span class="keyword">const</span> doubanMovieUrl = doubanMovie.<span class="property">url</span>;</span><br><span class="line"> <span class="keyword">const</span> doubanTitle = doubanMovie.<span class="property">title</span>;</span><br><span class="line"> <span class="comment">// const doubanDesc = doubanMovie.desc || '暂无描述';</span></span><br><span class="line"> <span class="keyword">const</span> doubanImage = doubanMovie.<span class="property">image</span>;</span><br><span class="line"> <span class="keyword">const</span> doubanDirector = doubanMovie.<span class="property">director</span> || <span class="string">'未知导演'</span>;</span><br><span class="line"> <span class="keyword">const</span> doubanRating = doubanMovie.<span class="property">rating</span> || <span class="string">'暂无评分'</span>;</span><br><span class="line"> <span class="comment">// const doubanReleaseDate = doubanMovie.releaseDate || '未知上映时间';</span></span><br><span class="line"> <span class="comment">// const doubanActors = doubanMovie.actors || '未知演员';</span></span><br><span class="line"> <span class="keyword">const</span> doubanRuntime = doubanMovie.<span class="property">runtime</span> || <span class="string">'未知时长'</span>;</span><br><span class="line"></span><br><span class="line"> content += <span class="string">`</span></span><br><span class="line"><span class="string"> &lt;a class="douban-card" href="<span class="subst">${doubanMovieUrl}</span>" target="_blank"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-bgimg" style="background-image: url('<span class="subst">${doubanImage}</span>');"&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-left"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-img" style="background-image: url('<span class="subst">${doubanImage}</span>');"&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-right"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;&lt;span&gt;电影名: &lt;/span&gt;&lt;strong&gt;<span class="subst">${doubanTitle}</span>&lt;/strong&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;&lt;span&gt;导演: &lt;/span&gt;&lt;span&gt;<span class="subst">${doubanDirector}</span>&lt;/span&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;&lt;span&gt;评分: &lt;/span&gt;&lt;span&gt;<span class="subst">${doubanRating}</span>&lt;/span&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;&lt;span&gt;时长: &lt;/span&gt;&lt;span&gt;<span class="subst">${doubanRuntime}</span>&lt;/span&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/a&gt;</span></span><br><span class="line"><span class="string"> `</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (ext.<span class="property">doubanBook</span> &amp;&amp; ext.<span class="property">doubanBook</span>.<span class="property">id</span>) {</span><br><span class="line"> <span class="keyword">const</span> doubanBook = ext.<span class="property">doubanBook</span>;</span><br><span class="line"> <span class="keyword">const</span> bookUrl = doubanBook.<span class="property">url</span>;</span><br><span class="line"> <span class="keyword">const</span> bookTitle = doubanBook.<span class="property">title</span>;</span><br><span class="line"> <span class="comment">// const bookDesc = doubanBook.desc;</span></span><br><span class="line"> <span class="keyword">const</span> bookImage = doubanBook.<span class="property">image</span>;</span><br><span class="line"> <span class="keyword">const</span> bookAuthor = doubanBook.<span class="property">author</span>;</span><br><span class="line"> <span class="keyword">const</span> bookRating = doubanBook.<span class="property">rating</span>;</span><br><span class="line"> <span class="keyword">const</span> bookPubDate = doubanBook.<span class="property">pubDate</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> bookTemplate = <span class="string">`</span></span><br><span class="line"><span class="string"> &lt;a class="douban-card" href="<span class="subst">${bookUrl}</span>" target="_blank"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-bgimg" style="background-image: url('<span class="subst">${bookImage}</span>');"&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-left"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-img" style="background-image: url('<span class="subst">${bookImage}</span>');"&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-right"&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;</span></span><br><span class="line"><span class="string"> &lt;span&gt;书名: &lt;/span&gt;&lt;strong&gt;<span class="subst">${bookTitle}</span>&lt;/strong&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;</span></span><br><span class="line"><span class="string"> &lt;span&gt;作者: &lt;/span&gt;&lt;span&gt;<span class="subst">${bookAuthor}</span>&lt;/span&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;</span></span><br><span class="line"><span class="string"> &lt;span&gt;出版年份: &lt;/span&gt;&lt;span&gt;<span class="subst">${bookPubDate}</span>&lt;/span&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;div class="douban-card-item"&gt;</span></span><br><span class="line"><span class="string"> &lt;span&gt;评分: &lt;/span&gt;&lt;span&gt;<span class="subst">${bookRating}</span>&lt;/span&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> &lt;/a&gt;</span></span><br><span class="line"><span class="string"> `</span>;</span><br><span class="line"></span><br><span class="line"> content += bookTemplate;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (ext.<span class="property">video</span> &amp;&amp; ext.<span class="property">video</span>.<span class="property">type</span>) {</span><br><span class="line"> <span class="keyword">const</span> videoType = ext.<span class="property">video</span>.<span class="property">type</span>;</span><br><span class="line"> <span class="keyword">const</span> videoUrl = ext.<span class="property">video</span>.<span class="property">value</span>;</span><br><span class="line"> <span class="keyword">if</span> (videoType === <span class="string">'bilibili'</span>) {</span><br><span class="line"> <span class="comment">// Bilibili 视频模板</span></span><br><span class="line"> <span class="comment">// 从形如https://www.bilibili.com/video/BV1VGAPeAEMQ/?vd_source=91b3158d27d98ff41f842508c3794a13 的链接中提取视频 BV1VGAPeAEMQ</span></span><br><span class="line"> <span class="keyword">const</span> biliTemplate = <span class="string">`</span></span><br><span class="line"><span class="string"> &lt;div style="position: relative; padding: 30% 45%; margin-top: 10px;"&gt;</span></span><br><span class="line"><span class="string"> &lt;iframe </span></span><br><span class="line"><span class="string"> style="position: absolute; width: 100%; height: 100%; left: 0; top: 0; border-radius: 12px;" </span></span><br><span class="line"><span class="string"> src="<span class="subst">${videoUrl}</span>&amp;autoplay=0"</span></span><br><span class="line"><span class="string"> scrolling="no" </span></span><br><span class="line"><span class="string"> frameborder="no" </span></span><br><span class="line"><span class="string"> allowfullscreen&gt;</span></span><br><span class="line"><span class="string"> &lt;/iframe&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> `</span>;</span><br><span class="line"> <span class="comment">// 将模板插入到 DOM 中</span></span><br><span class="line"> content += biliTemplate;</span><br><span class="line"></span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (videoType === <span class="string">'youtube'</span>) {</span><br><span class="line"> <span class="comment">// YouTube 视频模板</span></span><br><span class="line"> <span class="comment">// 从形如https://youtu.be/2V6lvCUPT8I?si=DVhUas6l6qlAr6Ru的链接中提取视频 ID2V6lvCUPT8I</span></span><br><span class="line"> <span class="keyword">const</span> youtubeTemplate = <span class="string">`</span></span><br><span class="line"><span class="string"> &lt;div style="position: relative; padding: 30% 45%; margin-top: 10px;"&gt;</span></span><br><span class="line"><span class="string"> &lt;iframe width="100%"</span></span><br><span class="line"><span class="string"> style="position: absolute; width: 100%; height: 100%; left: 0; top: 0; border-radius: 12px;"</span></span><br><span class="line"><span class="string"> src="<span class="subst">${videoUrl}</span>"</span></span><br><span class="line"><span class="string"> title="YouTube video player" </span></span><br><span class="line"><span class="string"> frameborder="0" </span></span><br><span class="line"><span class="string"> allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" </span></span><br><span class="line"><span class="string"> referrerpolicy="strict-origin-when-cross-origin" </span></span><br><span class="line"><span class="string"> allowfullscreen&gt;</span></span><br><span class="line"><span class="string"> &lt;/iframe&gt;</span></span><br><span class="line"><span class="string"> &lt;/div&gt;</span></span><br><span class="line"><span class="string"> `</span>;</span><br><span class="line"> <span class="comment">// 将模板插入到 DOM 中</span></span><br><span class="line"> content += youtubeTemplate;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> {</span><br><span class="line"> <span class="attr">content</span>: content,</span><br><span class="line"> <span class="attr">user</span>: item.<span class="property">user</span>.<span class="property">nickname</span> || <span class="string">'匿名'</span>,</span><br><span class="line"> <span class="attr">avatar</span>: item.<span class="property">user</span>.<span class="property">avatarUrl</span> || <span class="string">'https://p.liiiu.cn/i/2024/03/29/66061417537af.png'</span>,</span><br><span class="line"> <span class="attr">date</span>: date,</span><br><span class="line"> <span class="attr">location</span>: item.<span class="property">location</span> || <span class="string">'山西'</span>,</span><br><span class="line"> <span class="attr">tags</span>: item.<span class="property">tags</span> ? item.<span class="property">tags</span>.<span class="title function_">split</span>(<span class="string">','</span>).<span class="title function_">filter</span>(<span class="function"><span class="params">tag</span> =&gt;</span> tag.<span class="title function_">trim</span>() !== <span class="string">''</span>) : [<span class="string">'无标签'</span>],</span><br><span class="line"> <span class="attr">text</span>: content.<span class="title function_">replace</span>(<span class="regexp">/\[(.*?)\]\((.*?)\)/g</span>, <span class="string">'[链接]'</span> + <span class="string">`<span class="subst">${imgs.length ? <span class="string">'[图片]'</span> : <span class="string">''</span>}</span>`</span>)</span><br><span class="line"> };</span><br><span class="line"> };</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">generateTalkElement</span> = (<span class="params">item</span>) =&gt; {</span><br><span class="line"> <span class="keyword">const</span> talkItem = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>);</span><br><span class="line"> talkItem.<span class="property">className</span> = <span class="string">'talk_item'</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> talkMeta = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>);</span><br><span class="line"> talkMeta.<span class="property">className</span> = <span class="string">'talk_meta'</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> avatar = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'img'</span>);</span><br><span class="line"> avatar.<span class="property">className</span> = <span class="string">'no-lightbox avatar'</span>;</span><br><span class="line"> avatar.<span class="property">src</span> = item.<span class="property">avatar</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> info = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>);</span><br><span class="line"> info.<span class="property">className</span> = <span class="string">'info'</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> talkNick = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'span'</span>);</span><br><span class="line"> talkNick.<span class="property">className</span> = <span class="string">'talk_nick'</span>;</span><br><span class="line"> talkNick.<span class="property">innerHTML</span> = <span class="string">`<span class="subst">${item.user}</span> <span class="subst">${generateIconSVG()}</span>`</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> talkDate = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'span'</span>);</span><br><span class="line"> talkDate.<span class="property">className</span> = <span class="string">'talk_date'</span>;</span><br><span class="line"> talkDate.<span class="property">textContent</span> = item.<span class="property">date</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> talkContent = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>);</span><br><span class="line"> talkContent.<span class="property">className</span> = <span class="string">'talk_content'</span>;</span><br><span class="line"> talkContent.<span class="property">innerHTML</span> = item.<span class="property">content</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> talkBottom = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>);</span><br><span class="line"> talkBottom.<span class="property">className</span> = <span class="string">'talk_bottom'</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="title class_">TagContainer</span> = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> talkTag = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'span'</span>);</span><br><span class="line"> talkTag.<span class="property">className</span> = <span class="string">'talk_tag'</span>;</span><br><span class="line"> talkTag.<span class="property">textContent</span> = <span class="string">`🏷️<span class="subst">${item.tags}</span>`</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> locationTag = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'span'</span>);</span><br><span class="line"> locationTag.<span class="property">className</span> = <span class="string">'location_tag'</span>;</span><br><span class="line"> locationTag.<span class="property">textContent</span> = <span class="string">`🌍<span class="subst">${item.location}</span>`</span>;</span><br><span class="line"></span><br><span class="line"> <span class="title class_">TagContainer</span>.<span class="title function_">appendChild</span>(talkTag);</span><br><span class="line"> <span class="title class_">TagContainer</span>.<span class="title function_">appendChild</span>(locationTag);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> commentLink = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'a'</span>);</span><br><span class="line"> commentLink.<span class="property">href</span> = <span class="string">'javascript:;'</span>;</span><br><span class="line"> commentLink.<span class="property">onclick</span> = <span class="function">() =&gt;</span> <span class="title function_">goComment</span>(item.<span class="property">text</span>);</span><br><span class="line"> <span class="keyword">const</span> commentIcon = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'span'</span>);</span><br><span class="line"> commentIcon.<span class="property">className</span> = <span class="string">'icon'</span>;</span><br><span class="line"> <span class="keyword">const</span> commentIconInner = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'i'</span>);</span><br><span class="line"> commentIconInner.<span class="property">className</span> = <span class="string">'fa-solid fa-message fa-fw'</span>;</span><br><span class="line"> commentIcon.<span class="title function_">appendChild</span>(commentIconInner);</span><br><span class="line"> commentLink.<span class="title function_">appendChild</span>(commentIcon);</span><br><span class="line"></span><br><span class="line"> talkMeta.<span class="title function_">appendChild</span>(avatar);</span><br><span class="line"> info.<span class="title function_">appendChild</span>(talkNick);</span><br><span class="line"> info.<span class="title function_">appendChild</span>(talkDate);</span><br><span class="line"> talkMeta.<span class="title function_">appendChild</span>(info);</span><br><span class="line"> talkItem.<span class="title function_">appendChild</span>(talkMeta);</span><br><span class="line"> talkItem.<span class="title function_">appendChild</span>(talkContent);</span><br><span class="line"> talkBottom.<span class="title function_">appendChild</span>(<span class="title class_">TagContainer</span>);</span><br><span class="line"> talkBottom.<span class="title function_">appendChild</span>(commentLink);</span><br><span class="line"> talkItem.<span class="title function_">appendChild</span>(talkBottom);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> talkItem;</span><br><span class="line"> };</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">goComment</span> = (<span class="params">e</span>) =&gt; {</span><br><span class="line"> <span class="keyword">const</span> match = e.<span class="title function_">match</span>(<span class="regexp">/&lt;div class="talk_content_text"&gt;([\s\S]*?)&lt;\/div&gt;/</span>);</span><br><span class="line"> <span class="keyword">const</span> textContent = match ? match[<span class="number">1</span>] : <span class="string">""</span>;</span><br><span class="line"> <span class="keyword">const</span> n = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">".atk-textarea"</span>);</span><br><span class="line"> n.<span class="property">value</span> = <span class="string">`&gt; <span class="subst">${textContent}</span>\n\n`</span>;</span><br><span class="line"> n.<span class="title function_">focus</span>();</span><br><span class="line"> btf.<span class="title function_">snackbarShow</span>(<span class="string">"已为您引用该说说,不删除空格效果更佳"</span>);</span><br><span class="line"> <span class="comment">// const n = document.querySelector(".atk-textarea");</span></span><br><span class="line"> <span class="comment">// n.value = `&gt; ${e}\n\n`;</span></span><br><span class="line"> <span class="comment">// n.focus();</span></span><br><span class="line"> <span class="comment">// btf.snackbarShow("已为您引用该说说,不删除空格效果更佳");</span></span><br><span class="line"> };</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">formatTime</span> = (<span class="params">time</span>) =&gt; {</span><br><span class="line"> <span class="keyword">const</span> d = <span class="keyword">new</span> <span class="title class_">Date</span>(time);</span><br><span class="line"> <span class="keyword">const</span> ls = [</span><br><span class="line"> d.<span class="title function_">getFullYear</span>(),</span><br><span class="line"> d.<span class="title function_">getMonth</span>() + <span class="number">1</span>,</span><br><span class="line"> d.<span class="title function_">getDate</span>(),</span><br><span class="line"> d.<span class="title function_">getHours</span>(),</span><br><span class="line"> d.<span class="title function_">getMinutes</span>(),</span><br><span class="line"> d.<span class="title function_">getSeconds</span>(),</span><br><span class="line"> ];</span><br><span class="line"> <span class="keyword">const</span> r = ls.<span class="title function_">map</span>(<span class="function">(<span class="params">a</span>) =&gt;</span> (a.<span class="title function_">toString</span>().<span class="property">length</span> === <span class="number">1</span> ? <span class="string">'0'</span> + a : a));</span><br><span class="line"> <span class="keyword">return</span> <span class="string">`<span class="subst">${r[<span class="number">0</span>]}</span>-<span class="subst">${r[<span class="number">1</span>]}</span>-<span class="subst">${r[<span class="number">2</span>]}</span> <span class="subst">${r[<span class="number">3</span>]}</span>:<span class="subst">${r[<span class="number">4</span>]}</span>`</span>;</span><br><span class="line"> };</span><br><span class="line"></span><br><span class="line"> <span class="title function_">fetchAndRenderTalks</span>();</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title function_">renderTalks</span>();</span><br><span class="line"></span><br><span class="line"><span class="comment">// function whenDOMReady() {</span></span><br><span class="line"><span class="comment">// const talkContainer = document.querySelector('#talk');</span></span><br><span class="line"><span class="comment">// talkContainer.innerHTML = '';</span></span><br><span class="line"><span class="comment">// fetchAndRenderTalks();</span></span><br><span class="line"><span class="comment">// }</span></span><br><span class="line"><span class="comment">// whenDOMReady();</span></span><br><span class="line"><span class="comment">// document.addEventListener("pjax:complete", whenDOMReady);</span></span><br></pre></td></tr></tbody></table></figure>
<p>自行修改js文件中的Moments地址为你的地址在文件中有一个gocomment函数实现的是获取卡片中的文本内容如果如果出现不匹配的情况请自行修改一下类名这里我匹配的是artalk的输入框。在这里我把代码做了修改因为我不想使用s3结果导致说说图片无法加载。。。<br>修改历程:日后再写</p>
<p>然后引入样式文件这个文件可以在配置文件中引用也可以在页面文件中类似于shuoshuo.js一样引用样式内容如下</p>
<figure class="highlight css"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-pseudo">:root</span> {</span><br><span class="line"> <span class="attr">--liushen-card-bg</span>: <span class="number">#fff</span>;</span><br><span class="line"> <span class="attr">--liushen-card-border</span>: <span class="number">1px</span> solid <span class="number">#e3e8f7</span>;</span><br><span class="line"> <span class="attr">--card-box-shadow</span>: <span class="number">0</span> <span class="number">3px</span> <span class="number">8px</span> <span class="number">6px</span> <span class="built_in">rgba</span>(<span class="number">7</span>,<span class="number">17</span>,<span class="number">27</span>,<span class="number">0.09</span>);</span><br><span class="line"> <span class="attr">--card-hover-box-shadow</span>: <span class="number">0</span> <span class="number">3px</span> <span class="number">8px</span> <span class="number">6px</span> <span class="built_in">rgba</span>(<span class="number">7</span>,<span class="number">17</span>,<span class="number">27</span>,<span class="number">0.2</span>);</span><br><span class="line"> <span class="attr">--liushen-card-secondbg</span>: <span class="number">#f1f3f8</span>;</span><br><span class="line"> <span class="attr">--liushen-button-hover-bg</span>: <span class="number">#2679cc</span>;</span><br><span class="line"> <span class="attr">--liushen-text</span>: <span class="number">#4c4948</span>;</span><br><span class="line"> <span class="attr">--liushen-button-bg</span>: <span class="number">#f1f3f8</span>;</span><br><span class="line"> <span class="attr">--liushen-fancybox-bg</span>: <span class="built_in">rgba</span>(<span class="number">255</span>,<span class="number">255</span>,<span class="number">255</span>,<span class="number">0.5</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-pseudo">:root</span>, <span class="selector-attr">[data-theme=dark]</span> {</span><br><span class="line"> <span class="attr">--liushen-card-bg</span>: <span class="number">#181818</span>;</span><br><span class="line"> <span class="attr">--liushen-card-secondbg</span>: <span class="number">#30343f</span>;</span><br><span class="line"> <span class="attr">--liushen-card-border</span>: <span class="number">1px</span> solid <span class="number">#42444a</span>;</span><br><span class="line"> <span class="attr">--card-box-shadow</span>: <span class="number">0</span> <span class="number">3px</span> <span class="number">8px</span> <span class="number">6px</span> <span class="built_in">rgba</span>(<span class="number">7</span>,<span class="number">17</span>,<span class="number">27</span>,<span class="number">0.09</span>);</span><br><span class="line"> <span class="attr">--card-hover-box-shadow</span>: <span class="number">0</span> <span class="number">3px</span> <span class="number">8px</span> <span class="number">6px</span> <span class="built_in">rgba</span>(<span class="number">7</span>,<span class="number">17</span>,<span class="number">27</span>,<span class="number">0.2</span>);</span><br><span class="line"> <span class="attr">--liushen-button-bg</span>: <span class="number">#30343f</span>;</span><br><span class="line"> <span class="attr">--liushen-button-hover-bg</span>: <span class="number">#2679cc</span>;</span><br><span class="line"> <span class="attr">--liushen-text</span>: <span class="built_in">rgba</span>(<span class="number">255</span>,<span class="number">255</span>,<span class="number">255</span>,<span class="number">0.702</span>);</span><br><span class="line"> <span class="attr">--liushen-fancybox-bg</span>: <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0.5</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">/* 卡片初始化 */</span></span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="built_in">calc</span>(<span class="number">33.333%</span> - <span class="number">6px</span>);</span><br><span class="line"> <span class="attribute">background</span>: <span class="built_in">var</span>(--liushen-card-bg);</span><br><span class="line"> <span class="attribute">border</span>: <span class="built_in">var</span>(--liushen-card-border);</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="built_in">var</span>(--card-box-shadow);</span><br><span class="line"> <span class="attribute">transition</span>: box-shadow .<span class="number">3s</span> ease-in-out;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">flex-direction</span>: column;</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">20px</span>;</span><br><span class="line"> <span class="attribute">margin-bottom</span>: <span class="number">9px</span>;</span><br><span class="line"> <span class="attribute">margin-right</span>: <span class="number">9px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span><span class="selector-pseudo">:hover</span> {</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="built_in">var</span>(--card-hover-box-shadow);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">@media</span> (<span class="attribute">max-width</span>: <span class="number">900px</span>) {</span><br><span class="line"> <span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="built_in">calc</span>(<span class="number">50%</span> - <span class="number">5px</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="keyword">@media</span> (<span class="attribute">max-width</span>: <span class="number">450px</span>) {</span><br><span class="line"> <span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="built_in">calc</span>(<span class="number">100%</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#talk</span>{</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">box-sizing</span>: border-box;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_meta</span> <span class="selector-class">.avatar</span> {</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">0</span> <span class="meta">!important</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">60px</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">60px</span>;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_bottom</span>,</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_meta</span> {</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">align-items</span>: center;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_meta</span> {</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">align-items</span>: center;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">padding-bottom</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">border-bottom</span>: <span class="number">1px</span> dashed grey; <span class="comment">/* 添加灰色虚线边框 */</span></span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_bottom</span> {</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">padding-top</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">border-top</span>: <span class="number">1px</span> dashed grey; <span class="comment">/* 添加灰色虚线边框 */</span></span><br><span class="line"> <span class="attribute">justify-content</span>: space-between;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_meta</span> <span class="selector-class">.info</span> {</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">flex-direction</span>: column;</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">10px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_meta</span> <span class="selector-class">.info</span> <span class="selector-class">.talk_nick</span> {</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#6dbdc3</span>;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">1.2rem</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_meta</span> <span class="selector-class">.info</span> <span class="selector-tag">svg</span><span class="selector-class">.is-badge</span><span class="selector-class">.icon</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">padding-top</span>: <span class="number">3px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_meta</span> <span class="selector-class">.info</span> <span class="selector-tag">span</span><span class="selector-class">.talk_date</span> {</span><br><span class="line"> <span class="attribute">opacity</span>: .<span class="number">6</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> {</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">10px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> <span class="selector-class">.zone_imgbox</span> {</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">flex-wrap</span>: wrap;</span><br><span class="line"> <span class="attr">--w</span>: <span class="built_in">calc</span>(<span class="number">25%</span> - <span class="number">8px</span>);</span><br><span class="line"> <span class="attribute">gap</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">10px</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> <span class="selector-class">.zone_imgbox</span> <span class="selector-tag">a</span> {</span><br><span class="line"> <span class="attribute">display</span>: block;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="built_in">var</span>(--w);</span><br><span class="line"> <span class="attribute">aspect-ratio</span>: <span class="number">1</span>/<span class="number">1</span>;</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> <span class="selector-class">.zone_imgbox</span> <span class="selector-tag">a</span><span class="selector-pseudo">:first-child</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">aspect-ratio</span>: <span class="number">1.8</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> <span class="selector-class">.zone_imgbox</span> <span class="selector-tag">img</span> {</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">0</span> <span class="meta">!important</span>;</span><br><span class="line"> <span class="attribute">object-fit</span>: cover;</span><br><span class="line">}</span><br><span class="line"><span class="comment">/* 底部 */</span></span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> {</span><br><span class="line"> <span class="attribute">opacity</span>: .<span class="number">9</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> <span class="selector-class">.icon</span> {</span><br><span class="line"> <span class="attribute">float</span>: right;</span><br><span class="line"> <span class="attribute">transition</span>: all .<span class="number">3s</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> <span class="selector-class">.icon</span><span class="selector-pseudo">:hover</span> {</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#49b1f5</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> <span class="selector-tag">span</span><span class="selector-class">.talk_tag</span>,</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> <span class="selector-tag">span</span><span class="selector-class">.location_tag</span> {</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">14px</span>;</span><br><span class="line"> <span class="attribute">background-color</span>: <span class="built_in">var</span>(--liushen-card-secondbg);</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">3px</span> <span class="number">15px</span> <span class="number">3px</span> <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">transition</span>: box-shadow <span class="number">0.3s</span> ease;</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">2px</span> <span class="number">4px</span> <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0.1</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> <span class="selector-tag">span</span><span class="selector-class">.location_tag</span> {</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">5px</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> <span class="selector-tag">span</span><span class="selector-class">.talk_tag</span><span class="selector-pseudo">:hover</span>,</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_bottom</span> <span class="selector-tag">span</span><span class="selector-class">.location_tag</span><span class="selector-pseudo">:hover</span> {</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">4px</span> <span class="number">8px</span> <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0.3</span>);</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span>&gt;<span class="selector-tag">a</span> {</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">3px</span>;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#ff7d73</span> <span class="meta">!important</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span>&gt;<span class="selector-tag">a</span><span class="selector-pseudo">:hover</span>{</span><br><span class="line"> <span class="attribute">text-decoration</span>: none <span class="meta">!important</span>;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#ff5143</span> <span class="meta">!important</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">@media</span> screen <span class="keyword">and</span> (<span class="attribute">max-width</span>: <span class="number">900px</span>) {</span><br><span class="line"> <span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> <span class="selector-class">.zone_imgbox</span> {</span><br><span class="line"> <span class="attr">--w</span>: <span class="built_in">calc</span>(<span class="number">33%</span> - <span class="number">5px</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-id">#post-comment</span>{</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">3px</span></span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="keyword">@media</span> screen <span class="keyword">and</span> (<span class="attribute">max-width</span>: <span class="number">768px</span>) {</span><br><span class="line"> <span class="selector-class">.zone_imgbox</span> {</span><br><span class="line"> <span class="attribute">gap</span>: <span class="number">6px</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="selector-class">.zone_imgbox</span> {</span><br><span class="line"> <span class="attr">--w</span>: <span class="built_in">calc</span>(<span class="number">50%</span> - <span class="number">3px</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="selector-tag">span</span><span class="selector-class">.talk_date</span> {</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">14px</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> <span class="selector-class">.douban-card</span> {</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">10px</span> <span class="meta">!important</span>;</span><br><span class="line"> <span class="attribute">text-decoration</span>: none;</span><br><span class="line"> <span class="attribute">align-items</span>: center;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#faebd7</span>;</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">justify-content</span>: center;</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">max-width</span>: <span class="number">400px</span>;</span><br><span class="line"> <span class="attribute">overflow</span>: hidden;</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.douban-card</span> <span class="selector-class">.douban-card-bgimg</span> {</span><br><span class="line"> <span class="attribute">background-position</span>: <span class="number">50%</span>;</span><br><span class="line"> <span class="attribute">background-repeat</span>: no-repeat;</span><br><span class="line"> <span class="attribute">background-size</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">15px</span>) <span class="built_in">brightness</span>(.<span class="number">6</span>);</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">115%</span>;</span><br><span class="line"> <span class="attribute">position</span>: absolute;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">115%</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.douban-card</span> <span class="selector-class">.douban-card-left</span> {</span><br><span class="line"> <span class="attribute">align-items</span>: center;</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">flex-direction</span>: column;</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.douban-card</span> <span class="selector-class">.douban-card-left</span> <span class="selector-class">.douban-card-img</span> {</span><br><span class="line"> <span class="attribute">transition</span>: all .<span class="number">5s</span> ease;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">130px</span>;</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">80px</span>;</span><br><span class="line"> <span class="attribute">background-position</span>: <span class="number">50%</span>;</span><br><span class="line"> <span class="attribute">background-repeat</span>: no-repeat;</span><br><span class="line"> <span class="attribute">background-size</span>: <span class="number">100%</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.douban-card</span> <span class="selector-class">.douban-card-left</span><span class="selector-pseudo">:hover</span> <span class="selector-class">.douban-card-img</span> {</span><br><span class="line"> <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">5px</span>) <span class="built_in">brightness</span>(.<span class="number">6</span>);</span><br><span class="line"> <span class="attribute">transform</span>: <span class="built_in">perspective</span>(<span class="number">800px</span>) <span class="built_in">rotateX</span>(<span class="number">180deg</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.douban-card</span> <span class="selector-class">.douban-card-right</span> {</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#faebd7</span>;</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">flex-direction</span>: column;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">14px</span>;</span><br><span class="line"> <span class="attribute">line-height</span>: <span class="number">1.5</span>;</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.douban-card</span> <span class="selector-class">.douban-card-right</span> <span class="selector-class">.douban-card-item</span> {</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">4px</span>;</span><br><span class="line"> <span class="attribute">max-width</span>: <span class="number">95%</span>;</span><br><span class="line"> <span class="attribute">overflow</span>: hidden;</span><br><span class="line"> <span class="attribute">text-overflow</span>: ellipsis;</span><br><span class="line"> <span class="attribute">white-space</span>: nowrap;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">/* 外链卡片 */</span></span><br><span class="line"><span class="selector-id">#talk</span> <span class="selector-class">.talk_item</span> <span class="selector-class">.talk_content</span> <span class="selector-class">.shuoshuo-external-link</span> {</span><br><span class="line"> <span class="comment">/* 无下划线 */</span></span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">80px</span>;</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">background-color</span>: <span class="built_in">var</span>(--liushen-card-secondbg);</span><br><span class="line"> <span class="attribute">color</span>: <span class="built_in">var</span>(--liushen-card-text);</span><br><span class="line"> <span class="attribute">border</span>: <span class="built_in">var</span>(--liushen-card-border);</span><br><span class="line"> <span class="attribute">transition</span>: background-color .<span class="number">3s</span> ease-in-out;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span><span class="selector-pseudo">:hover</span> {</span><br><span class="line"> <span class="attribute">background-color</span>: <span class="built_in">var</span>(--liushen-button-hover-bg);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span> <span class="selector-class">.external-link</span> {</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">color</span>: <span class="built_in">var</span>(--liushen-text) <span class="meta">!important</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">100%</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span> <span class="selector-class">.external-link</span><span class="selector-pseudo">:hover</span> {</span><br><span class="line"> <span class="attribute">color</span>: white <span class="meta">!important</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span> <span class="selector-class">.external-link</span><span class="selector-pseudo">:hover</span> {</span><br><span class="line"> <span class="attribute">text-decoration</span>: none <span class="meta">!important</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span> <span class="selector-class">.external-link-left</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">60px</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">60px</span>;</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">10px</span>;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">background-size</span>: cover;</span><br><span class="line"> <span class="attribute">background-position</span>: center;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span> <span class="selector-class">.external-link-right</span> {</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">flex-direction</span>: column;</span><br><span class="line"> <span class="attribute">justify-content</span>: center;</span><br><span class="line"> <span class="attribute">width</span>: <span class="built_in">calc</span>(<span class="number">100%</span> - <span class="number">80px</span>);</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">10px</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span> <span class="selector-class">.external-link-right</span> <span class="selector-class">.external-link-title</span> {</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">1.0rem</span>;</span><br><span class="line"> <span class="attribute">font-weight</span>: <span class="number">800</span>;</span><br><span class="line"> <span class="attribute">white-space</span>: nowrap;</span><br><span class="line"> <span class="attribute">overflow</span>: hidden;</span><br><span class="line"> <span class="attribute">text-overflow</span>: ellipsis;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.shuoshuo-external-link</span> <span class="selector-class">.external-link-right</span> <span class="selector-tag">i</span> {</span><br><span class="line"> <span class="attribute">margin-left</span>: <span class="number">5px</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.limit</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">text-align</span>: center;</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">30px</span>;</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure>
<p>如果一切正常应该就可以显示了但是我在使用时发现卡片是黑色的把前面的root内容删除之后就好了。</p>
<h1 id="参考内容"><a href="#参考内容" class="headerlink" title="参考内容"></a>参考内容</h1><div class="liushen-tag-link"><a class="tag-Link" target="_blank" href="/go.html?u=aHR0cHM6Ly9ibG9nLmxpdXNoZW4uZnVuL3Bvc3RzLzgzMzgxODNhLw" rel="external nofollow noopener noreferrer">
<div class="tag-link-tips">🪧引用站外地址,不保证站点的可用性和安全性</div>
<div class="tag-link-bottom">
<div class="tag-link-left" style="background-image: url(https://pic.biss.click/image/1971bdc1-4349-4bb9-b683-20404f5da7d7.webp);"></div>
<div class="tag-link-right">
<div class="tag-link-title">liushen的博客</div>
<div class="tag-link-sitename">liushen</div>
</div>
<i class="fa-solid fa-angle-right"></i>
</div>
</a></div>
<p>当然还有chatgpt的支持</p>
</article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta"><i class="fas fa-circle-user fa-fw"></i>文章作者: </span><span class="post-copyright-info"><a href="https://blog.biss.click">biss</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta"><i class="fas fa-square-arrow-up-right fa-fw"></i>文章链接: </span><span class="post-copyright-info"><a href="https://blog.biss.click/posts/ad244066/">https://blog.biss.click/posts/ad244066/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta"><i class="fas fa-circle-exclamation fa-fw"></i>版权声明: </span><span class="post-copyright-info">本博客所有文章除特别声明外,均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a> 许可协议。转载请注明来源 <a href="https://blog.biss.click" target="_blank">Bi's Blog</a></span></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/web/">网站</a></div><div class="post-share"><style>#web-share-btn {
background: var(--btn-bg);
color: var(--btn-color);
border: none;
padding: 0.5rem 1rem;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s;
}
#web-share-btn:hover {
background: var(--btn-hover-color);
}
</style><div id="web-share-component"><button id="web-share-btn" title="分享本文"><i class="fas fa-share-alt"></i><span> 分享</span></button></div><script>(() => {
const setupWebShare = () => {
const btn = document.getElementById('web-share-btn')
if (!btn) return
// 点击事件处理
btn.addEventListener('click', async () => {
if (navigator.share) {
try {
await navigator.share({
title: '配置说说页面',
text: '...',
url: window.location.href
})
} catch (err) {
console.log('分享取消或失败', err)
}
} else {
// 降级处理:比如弹出提示或复制链接
const shareData = window.location.href
navigator.clipboard.writeText(shareData).then(() => {
btf.snackbarShow('系统不支持分享,已将链接复制到剪贴板')
})
}
})
}
// 考虑到 Butterfly 的 Pjax 跳转,需要重新绑定
setupWebShare()
document.addEventListener('pjax:complete', setupWebShare)
})()</script></div></div><nav class="pagination-post" id="pagination"><a class="pagination-related" href="/posts/da17d00/" title="在侧边栏中添加欢迎信息"><img class="cover" src="https://pic.biss.click/image/c0211558-17e4-46d2-9a35-e12f16f3f900.webp" onerror="onerror=null;src='/img/404.jpg'" alt="cover of previous post"><div class="info"><div class="info-1"><div class="info-item-1">上一篇</div><div class="info-item-2">在侧边栏中添加欢迎信息</div></div><div class="info-2"><div class="info-item-1">效果展示 开始折腾申请腾讯地图的api key 🪧引用站外地址,不保证站点的可用性和安全性 腾讯地图 Tencent 自行查看文档,要注意在填写信任域名时不填 https:// 添加js在主题 /source/js/目录下添加 txmap.js 有一个更完善的js脚本 🪧引用站外地址,不保证站点的可用性和安全性 txmap.js github 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858...</div></div></div></a><a class="pagination-related" href="/posts/6e5f5039/" title="部署历程"><img class="cover" src="https://pic.biss.click/image/135a0e53-78a0-42f4-a9e7-eaf9628db91e.webp" onerror="onerror=null;src='/img/404.jpg'" alt="cover of next post"><div class="info text-right"><div class="info-1"><div class="info-item-1">下一篇</div><div class="info-item-2">部署历程</div></div><div class="info-2"><div class="info-item-1">前提条件在开始之前,请确保你已满足以下条件: 服务器: 安装了 1Panel 面板的 Linux 服务器 拥有服务器的 SSH 访问权限(本文示例将使用 root 用户,你可以根据实际情况替换为其他有权限的用户)。 服务器上已安装 Git。 1Panel 配置: 已通过 1Panel 创建了一个网站(例如 blog.yourdomain.com并记下该网站的 根目录Document Root。通常在 1Panel 中,路径类似于 /opt/1panel/apps/openresty/openresty/www/sites/你的网站目录/index。请务必替换为你的实际路径。本地环境: 你的电脑上已安装并配置好 Hexo 博客环境。 你的电脑上已安装 Git。 已安装 Hexo Git 部署插件: 1npm install hexo-deployer-git --save SSH 密钥认证 (关键): 你需要在本地电脑生成 SSH 密钥对(如果还没有的话)。 必须将你的本地电脑的 SSH 公钥 添加到服务器上对应用户(如 root的 ~/.ssh...</div></div></div></a></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span>相关推荐</span></div><div class="relatedPosts-list"><a class="pagination-related" href="/posts/7e921903/" title="添加网站左上角菜单"><img class="cover" src="https://pic.biss.click/image/a40baba1-b296-4b3b-a781-da45bffb1b95.webp" alt="cover"><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2026-02-10</div><div class="info-item-2">添加网站左上角菜单</div></div><div class="info-2"><div class="info-item-1">看到柳神的网站有这种菜单,但是没有写魔改教程,只好自己慢慢摸索了。 🪧引用站外地址,不保证站点的可用性和安全性 liushen liushen 预计做好后是这种效果: 首先,修改\themes\butterfly\layout\includes\header\nav.pug: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051nav#nav //- 左侧区域:包含指纹菜单和网站名 span#blog-info #ls-menu-container i.fas.fa-fingerprint #ls-menu-panel .ls-section .ls-title 😀 个人网站 .ls-grid ...</div></div></div></a><a class="pagination-related" href="/posts/6e5f5039/" title="部署历程"><img class="cover" src="https://pic.biss.click/image/135a0e53-78a0-42f4-a9e7-eaf9628db91e.webp" alt="cover"><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2025-08-02</div><div class="info-item-2">部署历程</div></div><div class="info-2"><div class="info-item-1">前提条件在开始之前,请确保你已满足以下条件: 服务器: 安装了 1Panel 面板的 Linux 服务器 拥有服务器的 SSH 访问权限(本文示例将使用 root 用户,你可以根据实际情况替换为其他有权限的用户)。 服务器上已安装 Git。 1Panel 配置: 已通过 1Panel 创建了一个网站(例如 blog.yourdomain.com并记下该网站的 根目录Document Root。通常在 1Panel 中,路径类似于 /opt/1panel/apps/openresty/openresty/www/sites/你的网站目录/index。请务必替换为你的实际路径。本地环境: 你的电脑上已安装并配置好 Hexo 博客环境。 你的电脑上已安装 Git。 已安装 Hexo Git 部署插件: 1npm install hexo-deployer-git --save SSH 密钥认证 (关键): 你需要在本地电脑生成 SSH 密钥对(如果还没有的话)。 必须将你的本地电脑的 SSH 公钥 添加到服务器上对应用户(如 root的 ~/.ssh...</div></div></div></a><a class="pagination-related" href="/posts/33249733/" title="自定义分类条"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2025-08-14</div><div class="info-item-2">自定义分类条</div></div><div class="info-2"><div class="info-item-1">修改有风险,请注意备份 今天来自定义分类条 添加pug新建文件[BlogRoot]\themes\butterfly\layout\includes\categoryBar.pug文件写入 12345678910.category-bar-items#category-bar-items(class=is_home() ? 'home' : '') .category-bar-item(class=is_home() ? 'select' : '', id="category-bar-home") a(href=url_for('/'))= __('博客首页') each item in site.categories.find({ parent: { $exists: false } }).data .category-bar-item(class=select ? (selec...</div></div></div></a><a class="pagination-related" href="/posts/41b9aff7/" title="博客添加AI总结"><img class="cover" src="https://pic.biss.click/image/0d2f2a46-8aa9-42b6-a853-4794222a1492.webp" alt="cover"><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2025-08-12</div><div class="info-item-2">博客添加AI总结</div></div><div class="info-2"><div class="info-item-1">之前在wordpress中看到过ai插件现在使用hexo好像有洪墨AI但是收费有点负担不了于是寻找代替品真的找到了 🪧引用站外地址,不保证站点的可用性和安全性 liushen开发的插件 ai-summary 首先,安装插件: 1npm install hexo-ai-summary-liushen --save 安装额外插件: 1npm install axios p-limit node-fetch --save 安装后在Hexo配置文件 _config.yml任意位置添加以下配置 1234567891011121314151617181920212223242526# hexo-ai-summary-liushen# docs on : https://github.com/willow-god/hexo-ai-summaryaisummary: # 基本控制 enable: true ...</div></div></div></a><a class="pagination-related" href="/posts/3a26a97a/" title="为博客添加CMS系统"><img class="cover" src="https://pic.biss.click/image/883c5377-2b3d-4f7f-ba4f-1600e9c91b90.webp" alt="cover"><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2025-08-25</div><div class="info-item-2">为博客添加CMS系统</div></div><div class="info-2"><div class="info-item-1">序言因为喜欢wordpress之类动态博客的在线编辑功能但是又不想抛弃hexo特别是这个花里胡哨的模板所以想着给博客添加一个cms系统在搜索一番后发现这种CMS系统叫无头CMS然后找到一个很好的系统sveltia-cms 🪧引用站外地址,不保证站点的可用性和安全性 sveltia-cms sveltia 安装安装包在博客根目录下运行npm i @sveltia/cms 创建必要文件然后在博客source目录下创建admin目录并在其下新建index.html 123456789101112&lt;!doctype html&gt;&lt;html&gt;&lt;head&gt; &lt;meta charset="utf-8" /&gt; &lt;meta name="viewport" content="width=device-width, init...</div></div></div></a><a class="pagination-related" href="/posts/3e61a389/" title="自定义导航栏"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2025-08-13</div><div class="info-item-2">自定义导航栏</div></div><div class="info-2"><div class="info-item-1">最近在查找怎样自定义导航栏奈何没有对应版本的修改教程本站使用最新版butterfly5.4。 PC 菜单栏修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug的内容 1234567891011121314151617181920212223242526nav#nav span#blog-info a(href=url_for('/') title=config.title) if theme.nav.logo img.site-icon(src=url_for(theme.nav.logo)) if theme.nav.display_title span.site-name=config.title #menus- if (theme.algolia_search.enable || theme.local_search.enable)- #search-button- a.site-page...</div></div></div></a></div></div><hr class="custom-hr"><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="fas fa-comments fa-fw"></i><span> 评论</span></div></div><div class="comment-wrap"><div><div id="twikoo-wrap"></div></div></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info text-center"><div class="avatar-img"><img src="https://free.picui.cn/free/2025/08/10/689845496a283.png" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"></div><div class="author-info-name">biss</div><div class="author-info-description"></div><div class="site-data"><a href="/archives/"><div class="headline">文章</div><div class="length-num">30</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">10</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">5</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/bishshi"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons"><a class="social-icon" href="https://github.com/bishshi" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:bishsh2006@gmail.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content"></div><div id="welcome-ip-location-info"></div></div><div class="card-widget" id="card-poem"><div id="poem_sentence"></div><div id="poem_info"><div id="poem_dynasty"></div><div id="poem_author"></div></div></div><script src="https://cdn.liumingye.cn/npm/js-heo@1.0.11/poem/jinrishici.js" charset="utf-8"></script><script type="text/javascript">jinrishici.load(function(result) {
var sentence = document.querySelector("#poem_sentence")
var author = document.querySelector("#poem_author")
var dynasty = document.querySelector("#poem_dynasty")
var sentenceText = result.data.content
sentenceText = sentenceText.substr(0, sentenceText.length - 1);
sentence.innerHTML = sentenceText
dynasty.innerHTML = result.data.origin.dynasty
author.innerHTML = result.data.origin.author + '《' + result.data.origin.title + '》'
});</script><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>目录</span><span class="toc-percentage"></span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%89%8D%E6%9C%9F%E8%A6%81%E6%B1%82"><span class="toc-number">1.</span> <span class="toc-text">前期要求</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%A1%AC%E4%BB%B6%E8%A6%81%E6%B1%82"><span class="toc-number">1.1.</span> <span class="toc-text">硬件要求</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%BD%AF%E4%BB%B6%E8%A6%81%E6%B1%82"><span class="toc-number">1.2.</span> <span class="toc-text">软件要求</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E4%BB%8B%E7%BB%8D%E4%B8%8E%E5%B1%95%E7%A4%BA"><span class="toc-number">2.</span> <span class="toc-text">介绍与展示</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B"><span class="toc-number">3.</span> <span class="toc-text">部署教程</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#Moments%E9%83%A8%E7%BD%B2"><span class="toc-number">3.1.</span> <span class="toc-text">Moments部署</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#Compose%E9%83%A8%E7%BD%B2"><span class="toc-number">3.1.1.</span> <span class="toc-text">Compose部署</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Nginx%E4%BF%AE%E6%94%B9"><span class="toc-number">3.1.2.</span> <span class="toc-text">Nginx修改</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%89%8D%E7%AB%AF%E5%AE%9E%E7%8E%B0"><span class="toc-number">3.2.</span> <span class="toc-text">前端实现</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%8F%82%E8%80%83%E5%86%85%E5%AE%B9"><span class="toc-number">4.</span> <span class="toc-text">参考内容</span></a></li></ol></div></div><div class="card-widget card-post-series"><div class="item-headline"><i class="fa-solid fa-layer-group"></i><span>系列文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/posts/7e921903/" title="添加网站左上角菜单"><img src="https://pic.biss.click/image/a40baba1-b296-4b3b-a781-da45bffb1b95.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="添加网站左上角菜单"></a><div class="content"><a class="title" href="/posts/7e921903/" title="添加网站左上角菜单">添加网站左上角菜单</a><time datetime="2026-02-09T23:11:14.000Z" title="发表于 2026-02-10 07:11:14">2026-02-10</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/posts/f287c563/" title="添加typesense搜索">添加typesense搜索</a><time datetime="2026-02-05T05:14:16.000Z" title="发表于 2026-02-05 13:14:16">2026-02-05</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/b5601a7e/" title="自定义字体"><img src="https://pic.biss.click/image/6c4f9470-3917-44fb-ba10-30f3c4147592.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="自定义字体"></a><div class="content"><a class="title" href="/posts/b5601a7e/" title="自定义字体">自定义字体</a><time datetime="2026-01-15T23:47:15.000Z" title="发表于 2026-01-16 07:47:15">2026-01-16</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/5ed2f1e6/" title="在侧边栏添加日历和倒计时"><img src="https://pic.biss.click/image/232af9c6-97ce-42f8-85a8-9338963066e6.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="在侧边栏添加日历和倒计时"></a><div class="content"><a class="title" href="/posts/5ed2f1e6/" title="在侧边栏添加日历和倒计时">在侧边栏添加日历和倒计时</a><time datetime="2026-01-15T23:47:07.000Z" title="发表于 2026-01-16 07:47:07">2026-01-16</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/ce1ec3fe/" title="使用GitHub推送Hexo到服务器"><img src="https://pic.biss.click/image/e0a08509-dea4-4af7-bafa-c81ca9d1cf8d.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="使用GitHub推送Hexo到服务器"></a><div class="content"><a class="title" href="/posts/ce1ec3fe/" title="使用GitHub推送Hexo到服务器">使用GitHub推送Hexo到服务器</a><time datetime="2025-08-18T09:10:18.000Z" title="发表于 2025-08-18 17:10:18">2025-08-18</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/c6143ad3/" title="自定义页脚(新)"><img src="https://pic.biss.click/image/a49d986a-7430-4fa5-89dd-13dee416632f.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="自定义页脚(新)"></a><div class="content"><a class="title" href="/posts/c6143ad3/" title="自定义页脚(新)">自定义页脚(新)</a><time datetime="2025-08-14T09:05:27.000Z" title="发表于 2025-08-14 17:05:27">2025-08-14</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/posts/33249733/" title="自定义分类条">自定义分类条</a><time datetime="2025-08-14T08:25:49.000Z" title="发表于 2025-08-14 16:25:49">2025-08-14</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/posts/3e61a389/" title="自定义导航栏">自定义导航栏</a><time datetime="2025-08-13T08:12:25.000Z" title="发表于 2025-08-13 16:12:25">2025-08-13</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/b5866b9e/" title="利用 SiteMap 随机访问站内页面"><img src="https://pic.biss.click/image/2f13dc34-ccef-46f9-96d9-531e049fede5.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="利用 SiteMap 随机访问站内页面"></a><div class="content"><a class="title" href="/posts/b5866b9e/" title="利用 SiteMap 随机访问站内页面">利用 SiteMap 随机访问站内页面</a><time datetime="2025-08-12T07:15:32.000Z" title="发表于 2025-08-12 15:15:32">2025-08-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/41b9aff7/" title="博客添加AI总结"><img src="https://pic.biss.click/image/0d2f2a46-8aa9-42b6-a853-4794222a1492.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="博客添加AI总结"></a><div class="content"><a class="title" href="/posts/41b9aff7/" title="博客添加AI总结">博客添加AI总结</a><time datetime="2025-08-12T01:46:25.000Z" title="发表于 2025-08-12 09:46:25">2025-08-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/a6ab0925/" title="利用插件自定义页脚菜单"><img src="https://pic.biss.click/image/a49d986a-7430-4fa5-89dd-13dee416632f.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="利用插件自定义页脚菜单"></a><div class="content"><a class="title" href="/posts/a6ab0925/" title="利用插件自定义页脚菜单">利用插件自定义页脚菜单</a><time datetime="2025-08-12T01:19:16.000Z" title="发表于 2025-08-12 09:19:16">2025-08-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/8bdb35fb/" title="自定义右键菜单"><img src="https://pic.biss.click/image/9c4021c3-3111-4e19-acca-52ec899aa0b4.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="自定义右键菜单"></a><div class="content"><a class="title" href="/posts/8bdb35fb/" title="自定义右键菜单">自定义右键菜单</a><time datetime="2025-08-11T08:02:12.000Z" title="发表于 2025-08-11 16:02:12">2025-08-11</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/da17d00/" title="在侧边栏中添加欢迎信息"><img src="https://pic.biss.click/image/c0211558-17e4-46d2-9a35-e12f16f3f900.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="在侧边栏中添加欢迎信息"></a><div class="content"><a class="title" href="/posts/da17d00/" title="在侧边栏中添加欢迎信息">在侧边栏中添加欢迎信息</a><time datetime="2025-08-10T11:30:40.000Z" title="发表于 2025-08-10 19:30:40">2025-08-10</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/ad244066/" title="配置说说页面"><img src="https://pic.biss.click/image/0f3b8150-af77-426f-afc1-36df5ab27b36.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="配置说说页面"></a><div class="content"><a class="title" href="/posts/ad244066/" title="配置说说页面">配置说说页面</a><time datetime="2025-08-10T00:25:39.000Z" title="发表于 2025-08-10 08:25:39">2025-08-10</time></div></div></div></div><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/posts/5785bd01/" title="新年快乐!">新年快乐!</a><time datetime="2026-02-13T22:56:18.000Z" title="发表于 2026-02-14 06:56:18">2026-02-14</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/7e921903/" title="添加网站左上角菜单"><img src="https://pic.biss.click/image/a40baba1-b296-4b3b-a781-da45bffb1b95.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="添加网站左上角菜单"></a><div class="content"><a class="title" href="/posts/7e921903/" title="添加网站左上角菜单">添加网站左上角菜单</a><time datetime="2026-02-09T23:11:14.000Z" title="发表于 2026-02-10 07:11:14">2026-02-10</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/d2c8521/" title="将博客仓库转移到gitea"><img src="https://pic.biss.click/image/f9767ecf-b8de-461b-8e62-8f7444297ea6.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="将博客仓库转移到gitea"></a><div class="content"><a class="title" href="/posts/d2c8521/" title="将博客仓库转移到gitea">将博客仓库转移到gitea</a><time datetime="2026-02-07T04:30:39.000Z" title="发表于 2026-02-07 12:30:39">2026-02-07</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/34725d47/" title="安装gitea"><img src="https://pic.biss.click/image/961bc881-cb0a-4ab7-ace5-9990e71c30a0.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="安装gitea"></a><div class="content"><a class="title" href="/posts/34725d47/" title="安装gitea">安装gitea</a><time datetime="2026-02-06T22:32:04.000Z" title="发表于 2026-02-07 06:32:04">2026-02-07</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/posts/f287c563/" title="添加typesense搜索">添加typesense搜索</a><time datetime="2026-02-05T05:14:16.000Z" title="发表于 2026-02-05 13:14:16">2026-02-05</time></div></div></div></div></div></div></main><footer id="footer"><div class="footer-other"><div class="footer-copyright"><span class="copyright">©&nbsp;2025 - 2026 By biss</span><span class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></span></div><div class="footer_custom_text"><p> <a style="margin-inline:5px" target="_blank" href="https://hexo.io/zh-cn/"><img src="https://img.shields.io/badge/Frame-Hexo-blue?style=flat&amp;logo=hexo" title="hexo 8.1"></a> <a style="margin-inline:5px" target="_blank" href="https://butterfly.js.org"><img src="https://img.shields.io/badge/Theme-Butterfly-pink?style=flat" title="butterfly主题"></a> <a style="margin-inline:5px" target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img src="https://img.shields.io/badge/Copyright-BY--NC--SA-red?style=flat&amp;logo=alchemy" title="CC BY-NC-SA 4.0"></a> </p></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><button id="translateLink" type="button" title="简繁转换"></button><button id="darkmode" type="button" title="日间和夜间模式切换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><a id="to_comment" href="#post-comment" title="前往评论"><i class="fas fa-comments"></i></a><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/js/tw_cn.js"></script><script src="https://unpkg.com/@fancyapps/ui/dist/fancybox/fancybox.umd.js"></script><script src="https://unpkg.com/node-snackbar/dist/snackbar.min.js"></script><div class="js-pjax"><script>(() => {
const loadMathjax = () => {
if (!window.MathJax) {
window.MathJax = {
loader: {
load: [
// Four font extension packages (optional)
//- '[tex]/bbm',
//- '[tex]/bboldx',
//- '[tex]/dsfont',
'[tex]/mhchem'
],
paths: {
'mathjax-newcm': '[mathjax]/../@mathjax/mathjax-newcm-font',
//- // Four font extension packages (optional)
//- 'mathjax-bbm-extension': '[mathjax]/../@mathjax/mathjax-bbm-font-extension',
//- 'mathjax-bboldx-extension': '[mathjax]/../@mathjax/mathjax-bboldx-font-extension',
//- 'mathjax-dsfont-extension': '[mathjax]/../@mathjax/mathjax-dsfont-font-extension',
'mathjax-mhchem-extension': '[mathjax]/../@mathjax/mathjax-mhchem-font-extension'
}
},
output: {
font: 'mathjax-newcm',
},
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
tags: 'none',
packages: {
'[+]': [
'mhchem'
]
}
},
chtml: {
scale: 1.1
},
options: {
enableMenu: true,
menuOptions: {
settings: {
enrich: false // Turn off Braille and voice narration text automatic generation
}
},
renderActions: {
findScript: [10, doc => {
for (const node of document.querySelectorAll('script[type^="math/tex"]')) {
const display = !!node.type.match(/; *mode=display/)
const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display)
const text = document.createTextNode('')
node.parentNode.replaceChild(text, node)
math.start = {node: text, delim: '', n: 0}
math.end = {node: text, delim: '', n: 0}
doc.math.push(math)
}
}, '']
}
}
}
const script = document.createElement('script')
script.src = 'https://unpkg.com/mathjax/tex-mml-chtml.js'
script.id = 'MathJax-script'
script.async = true
document.head.appendChild(script)
} else {
MathJax.startup.document.state(0)
MathJax.texReset()
MathJax.typesetPromise()
}
}
btf.addGlobalFn('encrypt', loadMathjax, 'mathjax')
window.pjax ? loadMathjax() : window.addEventListener('load', loadMathjax)
})()</script><script>(() => {
const applyThemeDefaultsConfig = theme => {
if (theme === 'dark-mode') {
Chart.defaults.color = "rgba(255, 255, 255, 0.8)"
Chart.defaults.borderColor = "rgba(255, 255, 255, 0.2)"
Chart.defaults.scale.ticks.backdropColor = "transparent"
} else {
Chart.defaults.color = "rgba(0, 0, 0, 0.8)"
Chart.defaults.borderColor = "rgba(0, 0, 0, 0.1)"
Chart.defaults.scale.ticks.backdropColor = "transparent"
}
}
// Recursively traverse the config object and automatically apply theme-specific color schemes
const applyThemeConfig = (obj, theme) => {
if (typeof obj !== 'object' || obj === null) return
Object.keys(obj).forEach(key => {
const value = obj[key]
// If the property is an object and has theme-specific options, apply them
if (typeof value === 'object' && value !== null) {
if (value[theme]) {
obj[key] = value[theme] // Apply the value for the current theme
} else {
// Recursively process child objects
applyThemeConfig(value, theme)
}
}
})
}
const runChartJS = ele => {
window.loadChartJS = true
Array.from(ele).forEach((item, index) => {
const chartSrc = item.firstElementChild
const chartID = item.getAttribute('data-chartjs-id') || ('chartjs-' + index) // Use custom ID or default ID
const width = item.getAttribute('data-width')
const existingCanvas = document.getElementById(chartID)
// If a canvas already exists, remove it to avoid rendering duplicates
if (existingCanvas) {
existingCanvas.parentNode.remove()
}
const chartDefinition = chartSrc.textContent
const canvas = document.createElement('canvas')
canvas.id = chartID
const div = document.createElement('div')
div.className = 'chartjs-wrap'
if (width) {
div.style.width = width
}
div.appendChild(canvas)
chartSrc.insertAdjacentElement('afterend', div)
const ctx = document.getElementById(chartID).getContext('2d')
const config = JSON.parse(chartDefinition)
const theme = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark-mode' : 'light-mode'
// Set default styles (initial setup)
applyThemeDefaultsConfig(theme)
// Automatically traverse the config and apply dual-mode color schemes
applyThemeConfig(config, theme)
new Chart(ctx, config)
})
}
const loadChartJS = () => {
const chartJSEle = document.querySelectorAll('#article-container .chartjs-container')
if (chartJSEle.length === 0) return
window.loadChartJS ? runChartJS(chartJSEle) : btf.getScript('https://unpkg.com/chart.js/dist/chart.umd.js').then(() => runChartJS(chartJSEle))
}
// Listen for theme change events
btf.addGlobalFn('themeChange', loadChartJS, 'chartjs')
btf.addGlobalFn('encrypt', loadChartJS, 'chartjs')
window.pjax ? loadChartJS() : document.addEventListener('DOMContentLoaded', loadChartJS)
})()</script><script>(() => {
const isShuoshuo = GLOBAL_CONFIG_SITE.pageType === 'shuoshuo'
const option = null
const getCount = () => {
const countELement = document.getElementById('twikoo-count')
if(!countELement) return
twikoo.getCommentsCount({
envId: 'https://comment.biss.click',
region: '',
urls: [window.location.pathname],
includeReply: false
}).then(res => {
countELement.textContent = res[0].count
}).catch(err => {
console.error(err)
})
}
const init = (el = document, path = location.pathname) => {
twikoo.init({
el: el.querySelector('#twikoo-wrap'),
envId: 'https://comment.biss.click',
region: '',
onCommentLoaded: () => {
btf.loadLightbox(document.querySelectorAll('#twikoo .tk-content img:not(.tk-owo-emotion)'))
},
...option,
path: isShuoshuo ? path : (option && option.path) || path
})
isShuoshuo && (window.shuoshuoComment.destroyTwikoo = () => {
if (el.children.length) {
el.innerHTML = ''
el.classList.add('no-comment')
}
})
}
const loadTwikoo = (el, path) => {
if (typeof twikoo === 'object') setTimeout(() => init(el, path), 0)
else btf.getScript('https://unpkg.com/twikoo/dist/twikoo.all.min.js').then(() => init(el, path))
}
if (isShuoshuo) {
'Twikoo' === 'Twikoo'
? window.shuoshuoComment = { loadComment: loadTwikoo }
: window.loadOtherComment = loadTwikoo
return
}
if ('Twikoo' === 'Twikoo' || !false) {
if (false) btf.loadComment(document.getElementById('twikoo-wrap'), loadTwikoo)
else loadTwikoo()
} else {
window.loadOtherComment = loadTwikoo
}
})()</script></div><script src="/js/random.js"></script><script src="/js/shuoshuoshouye.js"></script><script src="/js/ai-summary.js"></script><script src="/js/typesense-search.js"></script><script src="/js/statistic.js"></script><script src="/js/footer.js" <script=""></script><script src="https://cdn.jsdmirror.com/npm/echarts@4.9.0/dist/echarts.min.js"></script><script src="https://cdn.jsdmirror.com/npm/aplayer/dist/APlayer.min.js"></script><script src="https://cdn.jsdmirror.com/npm/meting/dist/Meting.min.js"></script><script src="https://cdn.jsdmirror.com/gh/bishshi/welcomemessage/txmap.js"></script><script src="https://cdn.jsdmirror.com/gh/bishshi/rightmenu@1.2/rightmenu.js"></script><script src="https://cdn.jsdmirror.com/gh/bishshi/sidecalendar/calendar.js"></script><script src="https://cdn.jsdmirror.com/npm/chinese-lunar@0.1.4/lib/chinese-lunar.js"></script><script src="https://cdn.jsdmirror.com/npm/instantsearch.js@4.56.0"></script><script src="https://cdn.jsdmirror.com/npm/typesense-instantsearch-adapter@2.7.0/dist/typesense-instantsearch-adapter.min.js"></script><script src="https://unpkg.com/pjax/pjax.min.js" defer="defer"></script><script>document.addEventListener('DOMContentLoaded', () => {
const pjaxSelectors = ["head > title","#config-diff","#body-wrap","#rightside-config-hide","#rightside-config-show",".js-pjax"]
window.pjax = new Pjax({
elements: 'a:not([target="_blank"])',
selectors: pjaxSelectors,
cacheBust: false,
analytics: false,
scrollRestoration: false
})
const triggerPjaxFn = (val) => {
if (!val) return
Object.values(val).forEach(fn => {
try {
fn()
} catch (err) {
console.debug('Pjax callback failed:', err)
}
})
}
document.addEventListener('pjax:send', () => {
// removeEventListener
btf.removeGlobalFnEvent('pjaxSendOnce')
btf.removeGlobalFnEvent('themeChange')
// reset readmode
const $bodyClassList = document.body.classList
if ($bodyClassList.contains('read-mode')) $bodyClassList.remove('read-mode')
triggerPjaxFn(window.globalFn.pjaxSend)
})
document.addEventListener('pjax:complete', () => {
btf.removeGlobalFnEvent('pjaxCompleteOnce')
document.querySelectorAll('script[data-pjax]').forEach(item => {
const newScript = document.createElement('script')
const content = item.text || item.textContent || item.innerHTML || ""
Array.from(item.attributes).forEach(attr => newScript.setAttribute(attr.name, attr.value))
newScript.appendChild(document.createTextNode(content))
item.parentNode.replaceChild(newScript, item)
})
triggerPjaxFn(window.globalFn.pjaxComplete)
})
document.addEventListener('pjax:error', e => {
if (e.request.status === 404) {
true
? pjax.loadUrl('/404.html')
: window.location.href = e.request.responseURL
}
})
})</script><script async="" data-pjax="" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div><div class="js-pjax" id="rightMenu"><div class="rightMenu-group rightMenu-small"><a class="rightMenu-item" href="javascript:window.history.back();"><i class="fa fa-arrow-left"></i></a><a class="rightMenu-item" href="javascript:window.history.forward();"><i class="fa fa-arrow-right"></i></a><a class="rightMenu-item" href="javascript:window.location.reload();"><i class="fa fa-refresh"></i></a><a class="rightMenu-item" href="javascript:window.scrollTo(0, 0);"><i class="fa fa-arrow-up"></i></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-text"><a class="rightMenu-item" href="javascript:rmf.copySelect();"><i class="fa fa-copy"></i><span>复制</span></a><a class="rightMenu-item" href="javascript:rmf.searchinThisPage();"><i class="fas fa-search"></i><span>站内搜索</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-too"><a class="rightMenu-item" href="javascript:window.open(window.getSelection().toString());window.location.reload();"><i class="fa fa-link"></i><span>转到链接</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-paste"><a class="rightMenu-item" href="javascript:rmf.paste()"><i class="fa fa-copy"></i><span>粘贴</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-post"><a class="rightMenu-item" href="javascript:rmf.copyWordsLink()"><i class="fa fa-link"></i><span>复制本文地址</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-to"><a class="rightMenu-item" href="javascript:rmf.openWithNewTab()"><i class="fa fa-window-restore"></i><span>新窗口打开</span></a><a class="rightMenu-item" href="javascript:rmf.open()"><i class="fa fa-link"></i><span>转到链接</span></a><a class="rightMenu-item" href="javascript:rmf.copyLink()"><i class="fa fa-copy"></i><span>复制链接</span></a></div><div class="rightMenu-group rightMenu-line hide" id="menu-img"><a class="rightMenu-item" href="javascript:rmf.saveAs()"><i class="fa fa-download"></i><span>保存图片</span></a><a class="rightMenu-item" href="javascript:rmf.openWithNewTab()"><i class="fa fa-window-restore"></i><span>在新窗口打开</span></a><a class="rightMenu-item" href="javascript:rmf.click()"><i class="fa fa-arrows-alt"></i><span>全屏显示</span></a><a class="rightMenu-item" href="javascript:rmf.copyLink()"><i class="fa fa-copy"></i><span>复制图片链接</span></a></div><div class="rightMenu-group rightMenu-line"><a class="rightMenu-item" href="javascript:randomPost()"><i class="fa fa-paper-plane"></i><span>随便逛逛</span></a><a class="rightMenu-item" href="javascript:rmf.switchDarkMode();"><i class="fa fa-moon"></i><span>昼夜切换</span></a><a class="rightMenu-item" href="javascript:rmf.translate();"><i class="iconfont icon-fanti"></i><span>繁简转换</span></a><a class="rightMenu-item" href="javascript:rmf.switchReadMode();"><i class="fa fa-book"></i><span>阅读模式</span></a><a class="rightMenu-item" href="javascript:pjax.loadUrl(&quot;/privacy/&quot;);"><i class="fa fa-info-circle"></i><span>隐私声明</span></a><a class="rightMenu-item" href="javascript:pjax.loadUrl(&quot;/cookie/&quot;);"><i class="fa fa-info-circle"></i><span>Cookie协议</span></a><a class="rightMenu-item" href="javascript:pjax.loadUrl(&quot;/cc/&quot;);"><i class="fa fa-info-circle"></i><span>版权声明</span></a></div></div><!-- hexo injector body_end start --><script data-pjax="">
function butterfly_swiper_injector_config(){
var parent_div_git = document.getElementById('recent-posts');
var item_html = '<div class="recent-post-item" style="height: auto;width: 100%"><div class="blog-slider swiper-container-fade swiper-container-horizontal" id="swiper_container"><div class="blog-slider__wrp swiper-wrapper" style="transition-duration: 0ms;"><div class="blog-slider__item swiper-slide" style="background:url(https://pic.biss.click/image/63a5c345-cb40-4e92-bc7b-7dc4daaf5b74.webp);border-radius:12px;opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><div class="blog-slider__content"><span class="blog-slider__code">2025-09-28</span><a class="blog-slider__title" onclick="pjax.loadUrl(&quot;posts/b57500e9/&quot;);" href="javascript:void(0);" alt="">在Openwrt上安装AdguardHome</a><div class="blog-slider__text">还不知道怎么描述哦</div></div></div><div class="blog-slider__item swiper-slide" style="background:url(https://pic.biss.click/image/961bc881-cb0a-4ab7-ace5-9990e71c30a0.webp);border-radius:12px;opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><div class="blog-slider__content"><span class="blog-slider__code">2026-02-07</span><a class="blog-slider__title" onclick="pjax.loadUrl(&quot;posts/34725d47/&quot;);" href="javascript:void(0);" alt="">安装gitea</a><div class="blog-slider__text">还不知道怎么描述哦</div></div></div></div><div class="blog-slider__pagination swiper-pagination-clickable swiper-pagination-bullets"></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div></div>';
console.log('已挂载butterfly_swiper')
parent_div_git.insertAdjacentHTML("afterbegin",item_html)
}
var elist = 'undefined'.split(',');
var cpage = location.pathname;
var epage = '/';
var flag = 0;
for (var i=0;i<elist.length;i++){
if (cpage.includes(elist[i])){
flag++;
}
}
if ((epage ==='all')&&(flag == 0)){
butterfly_swiper_injector_config();
}
else if (epage === cpage){
butterfly_swiper_injector_config();
}
</script><script defer="" src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.4.5/js/swiper.min.js"></script><script defer="" data-pjax="" src="https://npm.elemecdn.com/hexo-butterfly-swiper-lyx/lib/swiper_init.js"></script><!-- hexo injector body_end end --></body></html>