From c2f12f9abe5cbaa0b4a26ac74da886f168faf8c6 Mon Sep 17 00:00:00 2001
From: Han <1655466387@qq.com>
Date: Sat, 8 Mar 2025 14:36:43 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9C=88=E5=AD=90=E9=A1=B5?=
=?UTF-8?q?=E9=9D=A2=F0=9F=91=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/assets/images/svg/Navs/friends.svg | 1 +
src/config.ts | 1 +
src/page_data/Friends.ts | 42 +++++++++++
src/pages/friends/index.astro | 24 ++++++
src/scripts/Friends.ts | 23 ++++++
src/scripts/Header.ts | 2 +-
src/styles/Friends.less | 89 +++++++++++++++++++++++
7 files changed, 181 insertions(+), 1 deletion(-)
create mode 100644 public/assets/images/svg/Navs/friends.svg
create mode 100644 src/page_data/Friends.ts
create mode 100644 src/pages/friends/index.astro
create mode 100644 src/scripts/Friends.ts
create mode 100644 src/styles/Friends.less
diff --git a/public/assets/images/svg/Navs/friends.svg b/public/assets/images/svg/Navs/friends.svg
new file mode 100644
index 0000000..9a26c27
--- /dev/null
+++ b/public/assets/images/svg/Navs/friends.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/config.ts b/src/config.ts
index 60e613a..3c9043f 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -9,6 +9,7 @@ export default {
// 导航栏 (新窗口打开 newWindow: true)
Navs: [
{ text: '朋友', link: '/links', icon: '/assets/images/svg/Navs/links.svg' },
+ { text: '圈子', link: '/friends', icon: '/assets/images/svg/Navs/friends.svg' },
{ text: '动态', link: '/talking', icon: '/assets/images/svg/Navs/talking.svg' },
{ text: '昔日', link: '/archives', icon: '/assets/images/svg/Navs/archives.svg' },
{ text: '留言', link: '/message', icon: '/assets/images/svg/Navs/message.svg' },
diff --git a/src/page_data/Friends.ts b/src/page_data/Friends.ts
new file mode 100644
index 0000000..96d8876
--- /dev/null
+++ b/src/page_data/Friends.ts
@@ -0,0 +1,42 @@
+export default {
+ // API 接口请求优先,数据格式保持和 data 一致
+ api: '',
+ // api 为空则使用 data 静态数据
+ data: [
+ {
+ "title": "Astro 中使用 Lenis 增加鼠标滚动阻尼感",
+ "auther": "韩小韩博客",
+ "date": "2025-03-06",
+ "link": "https://www.vvhan.com/article/Lenis-in-Astro",
+ "content": "在移动端触控交互中,惯性滚动带来的丝滑体验已成为标配,但鼠标滚轮受限于机械结构,滚动时难免产生生硬的段落感。如何让传统滚轮操作也能获得如触控板般的阻尼反馈?Lenis库通过JavaScript模拟惯性算法,成功将”物理惯性”引入网页滚动,本文将解析其实现原理与实战应用。核心技术原理滚轮事件拦截与目"
+ },
+ {
+ "title": "一组手机和电脑动态壁纸分享【分享】",
+ "auther": "韩小韩博客",
+ "date": "2025-03-05",
+ "link": "https://www.vvhan.com/article/pc-mobile-video-wallpaper",
+ "content": "本文精选一组电脑及手机动态壁纸,让你的设备秒变沉浸式视觉盛宴。壁纸下载壁纸下载壁纸下载"
+ },
+ {
+ "title": "Astro 添加 Twikoo 评论组件",
+ "auther": "韩小韩博客",
+ "date": "2025-03-03",
+ "link": "https://www.vvhan.com/article/astro-twikoo",
+ "content": "Astro在使用视图过渡路由时,在跳转路由时,会导致JS文件只有在第一次进入页面时生效,所以Astro在使用视图过渡路由下Twikoo时无法正常使用的,我是单独写了一个评论组件,对Twikoo进行动态加载,然后在需要评论的页面引入的。创建Twikoo评论组件<!--Comment.astr"
+ },
+ {
+ "title": "Astro主题-优雅的vhAstro-Theme【使用文档】",
+ "auther": "韩小韩博客",
+ "date": "2025-03-02",
+ "link": "https://www.vvhan.com/article/astro-theme-vhastro-theme",
+ "content": "🥝从Z-Blog到Emlog,从Typecho到Hexo,从动态博客到静态博客,作为一个前端,我深入了解了多种SSG工具,如Hexo、Vitepress、Hugo等,并最终锁定了Astro作为重构博客的选择。🍇Astro活跃的社区支持、广泛的现代框架兼容性、高效的性能优化、优秀的开发体验以及原生"
+ },
+ {
+ "title": "Fetch的GET、POST简单HTTP请求封装",
+ "auther": "韩小韩博客",
+ "date": "2025-02-24",
+ "link": "https://www.vvhan.com/article/fetch-get-post",
+ "content": "在现代Web开发中,FetchAPI已经可以完全替代Ajax,是处理HTTP请求的利器,且支持异步操作和Promise链式调用。本文将详细介绍如何使用FetchAPI封装GET和POST请求。通过封装,代码可复用性更高,逻辑更清晰,同时还能简化错误处理和请求配置,大大提升开发效率和代码质量。GET请"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/pages/friends/index.astro b/src/pages/friends/index.astro
new file mode 100644
index 0000000..2b438f7
--- /dev/null
+++ b/src/pages/friends/index.astro
@@ -0,0 +1,24 @@
+---
+// 页面 Info
+import SITE_CONFIG from "../../config";
+const { Description } = SITE_CONFIG;
+// Aside组件
+import Aside from "../../components/Aside.astro";
+// 公共 Layout
+import Layout from "../../layouts/Layout.astro";
+// 动态说说样式
+import "../../styles/Friends.less";
+---
+
+
+
+
diff --git a/src/scripts/Friends.ts b/src/scripts/Friends.ts
new file mode 100644
index 0000000..e64c5a5
--- /dev/null
+++ b/src/scripts/Friends.ts
@@ -0,0 +1,23 @@
+
+import vh from 'vh-plugin'
+import { fmtDate } from '../utils/index'
+import { $GET } from '../utils/index'
+
+const FriendsInit = async (data: any) => {
+ const friendsDOM = document.querySelector('.vh-container>.vh-friends>main')
+ if (!friendsDOM) return;
+ try {
+ let res = data;
+ if (typeof data === 'string') {
+ res = await $GET(api);
+ }
+ friendsDOM.innerHTML = res.map((i: any) => `${i.content}
`).join('');
+ } catch {
+ vh.Toast('获取数据失败')
+ }
+}
+
+// 朋友圈 RSS 初始化
+import FRIENDS_DATA from "../page_data/Friends";
+const { api, data } = FRIENDS_DATA;
+export default () => FriendsInit(api || data);
\ No newline at end of file
diff --git a/src/scripts/Header.ts b/src/scripts/Header.ts
index 92a741b..c567d5d 100644
--- a/src/scripts/Header.ts
+++ b/src/scripts/Header.ts
@@ -1,4 +1,4 @@
-const linkListArr = ['links', 'talking', 'archives', 'message', 'about']
+const linkListArr = ['links', 'friends', 'talking', 'archives', 'message', 'about']
export default () => {
const linkARR = document.querySelectorAll('.vh-link-list>a');
if (!linkARR.length) return;
diff --git a/src/styles/Friends.less b/src/styles/Friends.less
new file mode 100644
index 0000000..862f8c8
--- /dev/null
+++ b/src/styles/Friends.less
@@ -0,0 +1,89 @@
+ // 说说页评论
+ .vh-friends {
+ min-height: 56vh;
+
+ &>main {
+ margin: 1.25rem 0;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ gap: 1.25rem;
+
+ &>article {
+ box-sizing: border-box;
+ padding: 1rem;
+ width: 100%;
+ height: max-content;
+ border-radius: 0.5rem;
+ box-shadow: 0 3px 8px 6px rgba(7, 17, 27, 0.05);
+ background: #fff linear-gradient(90deg, #EDEEF388, #fff) no-repeat 100% 100% / 0 1px;
+ background-position: 0 100%;
+ background-size: 0 100%;
+ transition: .7s cubic-bezier(.6, .1, 0, 1), background-position 0s;
+ overflow: hidden;
+
+ &:hover {
+ background-size: 100% 100%;
+ }
+
+ &>a {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+ width: 100%;
+ height: max-content;
+
+ &>header {
+ &>h2 {
+ font-size: 1.08rem;
+ }
+ }
+
+ &>p {
+ color: #26262680;
+ font-size: 0.875rem;
+ line-height: 1.8;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ text-overflow: ellipsis;
+ word-break: break-all;
+ overflow: hidden;
+ }
+
+ &>footer {
+ box-sizing: border-box;
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+ height: max-content;
+
+ &>span,
+ &>time {
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ width: max-content;
+ height: 1.56rem;
+ font-size: 0.8rem;
+
+ &>img {
+ width: 1.56rem;
+ height: 1.56rem;
+ border-radius: 50%;
+ }
+ }
+
+ &>time {
+ padding: 0.5rem;
+ background: #F7F7F7;
+ border-radius: 0.8rem;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @media screen and (max-width: 888px) {}
\ No newline at end of file