留言页的群聊风格改造

1021 字
5 分钟
留言页的群聊风格改造

AI 摘要

博客的留言板应该是什么样子的?传统的评论区一层一层嵌套回复,看起来有点像论坛。但如果把它做成聊天软件那种气泡风格,会不会更有意思一点?

这篇文章就聊聊这个改造过程。

整体思路#

改造的核心是用一个自定义的 Svelte 组件替换掉原来的 Twikoo 评论挂件。组件直接与 Twikoo 的 API 通信,获取留言数据,然后以聊天气泡的形式渲染出来。

这样做的几个好处:

  • 视觉上更统一,可以完全控制样式
  • 交互更灵活,可以加一些原版挂件没有的功能
  • 不需要额外引入第三方 UI,自己写更容易控制体积

API 通信#

组件通过 fetch 直接调用 Twikoo 的 API 接口,主要就两个操作:

  • COMMENT_GET:获取指定路径(这里是 /guestbook/)下的所有留言
  • COMMENT_SUBMIT:提交新的留言

Twikoo 返回的数据是嵌套结构的——每条留言下可能有若干条回复。但聊天界面不适合树形展示,所以组件把整个回复树拍平成一个按时间排序的列表,回复内容前面加上 @昵称 的前缀,这样上下文就很清晰了。

聊天气泡#

整个界面是最像聊天软件的部分。每条消息是一行,包含头像、昵称、时间和气泡内容。

头像 36 像素的圆形,优先显示 Gravatar 头像,没有的话显示昵称首字。自己的消息靠右对齐,其他人的靠左。

气泡的样式靠 border-radius 的不对称处理来实现——别人的气泡是左下角直角、其他角圆角;自己的气泡反过来,右下角直角。这种不对称感就是聊天气泡的视觉特征。

自己的气泡使用主题色作为背景,白色文字,在视觉上突出区分。管理员的消息也使用相同的样式。

区分自己与他人#

组件通过 localStorage 存储用户的留言档案(昵称、邮箱、网址),提交时会记录这条留言的 ID。再次加载时,如果某条留言的邮箱或 ID 匹配,就把它标记为”自己的消息”,显示在右侧。

自动刷新#

留言板每隔 30 秒会自动请求一次新数据,新留言会即时出现,不需要手动刷新页面。但如果用户已经向上滚动浏览历史消息,自动滚动会暂停,只有停留在底部时才会自动滚到最新消息。

个人资料弹窗#

首次留言时会弹出一个资料填写框,输入昵称和邮箱后才会显示发送栏。这些信息存在 localStorage 里,下次访问就不用再填了。

回复功能#

每条消息悬浮时会出现”回复”按钮,点击后会在输入框上方显示”回复 @某某”的提示条,发送时会将这条回复关联到原消息上。点击提示条上的叉号可以取消回复。

一些样式细节#

所有样式都写在 Svelte 组件的 <style> 标签里,使用 gb__ 前缀来避免污染全局样式。

发送按钮是圆形的,不可用时有降低透明度。消息列表限制了最大高度(520px),超出可以滚动。每条新消息出现时有一个轻微的淡入动画,让感觉更自然。

深色模式的支持没有额外处理,因为组件直接使用了 CSS 变量 var(--primary)var(--card-bg) 这些主题变量,切换主题时颜色会自动适配。

最后#

这个改造其实不复杂,核心就是”把树形评论拍平成聊天记录”。但效果还是挺明显的——留言板不再是冷冰冰的评论区,更像一个可以聊天的空间。如果你也用的 Twikoo,不妨试试类似的改造,让访客感觉更轻松一些。

支持与分享

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

打赏
留言页的群聊风格改造
https://blog.amamo.top/posts/留言页的群聊风格改造/
作者
Admin
发布于
2026-07-27
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
年华
Hello, 欢迎来到我的小破站。
统计
公告
欢迎来到我的博客。我会用AI对博文进入修改和润色。
分类
标签
最新动态
站点统计
文章
17
分类
14
标签
36
总字数
10,791
运行时长
0
最后活动
0 天前
天气预报
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.15.2
文章许可
CC BY-NC-SA 4.0