惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
S
Schneier on Security
博客园 - 【当耐特】
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
MongoDB | Blog
MongoDB | Blog
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
月光博客
月光博客
T
The Exploit Database - CXSecurity.com
Forbes - Security
Forbes - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 叶小钗
Recent Announcements
Recent Announcements
IT之家
IT之家
B
Blog
C
CERT Recently Published Vulnerability Notes
S
SegmentFault 最新的问题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Troy Hunt's Blog
O
OpenAI News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
V2EX - 技术
V2EX - 技术
L
Lohrmann on Cybersecurity
C
Cyber Attacks, Cyber Crime and Cyber Security
H
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Last Week in AI
Last Week in AI
Help Net Security
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
A
About on SuperTechFans
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
Vercel News
Vercel News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recorded Future
Recorded Future
C
Cisco Blogs
Project Zero
Project Zero

云烟博客 | 网络安全实战经验与个人技术成长笔记

网络安全面经持续更新中.. 数据安全应急演练场景--攻击 数据安全应急演练场景开发思路--开发 应急演练钓鱼场景-攻击—木马免杀 伪装pdf钓鱼 记一次省护网行动中重要成果挖掘 记一次edusr某大学严重漏洞挖掘 记一次edu信息收集案例 武功山反穿 2025年度总结 腾格里五湖穿越 typecho足迹插件 LuminTrace v19.0更新日志(重点更新:全新独立城市地图) typecho足迹插件-LuminTrace
typecho留言墙开发
@fengc'Blog: · 2025-12-30 · via 云烟博客 | 网络安全实战经验与个人技术成长笔记

前言

在浏览过一些师傅们的博客,看到一些让人眼前一亮的留言墙。

每一条留言都是一个独立的小故事,我认为都很有意义。于是,NoteWall 插件诞生了。

开发时遇到很多坑,记录适配PJAX和优化交互体验的一些细节。

我的天,这个足迹效果太棒了,请问博主有考虑出售吗?希望使用到这么好的足迹插件,我是个自驾爱好者...

2026-04-01

不点钓鱼链接,不下载未知文件,注意辨别文件类型

看完删光压缩包🤣

2026-03-13

Windows默认设计这块确实有点反人类

@秋风于渭水: 微软这个设计就挺奇怪的,很多第三方...

2026-03-13

微软这个设计就挺奇怪的,很多第三方的文件管理器都是选择隐藏文件名的中间部分,毕竟如果一个文件夹...

@云烟: 隐藏拓展名后文件名前面的exe直接...

2026-03-12

隐藏拓展名后文件名前面的exe直接没了 更容易中招了

@秋风于渭水: 啊哈,这个技巧的核心是:将exe后...

2026-03-12

啊哈,这个技巧的核心是:将exe后缀名隐藏起来,据我的观察,大部分年龄较大的人的电脑,默认就是...

2026-03-12

我这边测试是正确的,有什么问题吗

@obaby: 你个站的rss地址是错的

2026-03-08

利用一切可利用的信息 看个人信息收集手段了

@林林: edusrc?不是不让社工吗?

2026-03-05

edusrc?不是不让社工吗?

2026-03-05

https://wyuanlin.top

@林King: 已收藏网站,欢迎互访

2026-03-03

已收藏网站,欢迎互访

2026-03-03

还在学习中

@obaby: 这个专业啊

2026-03-01

这个专业啊

2026-03-01

新年快乐!

@Ksable: 新年好呀

2026-02-22

这个插件真好,细节打磨得好完美,会考虑分享出来嘛。

2026-02-07

晚点传上去,这个插件目前只支持typecho的博客哦

@大陈橘: 上传了github了嘛? 我想试试...

2026-01-27

上传了github了嘛? 我想试试把他安装在我的小破网站上,哈哈哈哈

2026-01-27

现在应该正常了 前两天评论区被广告轰炸 防御策略拉满了

@蒙需: 为什么总是提示评论失败,再试一次。

2026-01-18

回复

@测试评论者: 测试评论

2026-01-17

为什么总是提示评论失败,再试一次。

2026-01-16

收到啦,感谢博客集团队的用心跟进!问题顺利解决太好了,辛苦各位~ 也祝平台运营越来越顺

@博客集: 今天复盘项目,才发现这么久都没处理...

2025-12-31

今天复盘项目,才发现这么久都没处理好您的问题,已经把运维祭天了,实在抱歉哈,目前已解决,日常来...

2025-12-31

订阅成功

@云烟: 您好 我调整了一下 请尝试使用:h...

2025-12-29

您好 我调整了一下 请尝试使用:https://www.yunyanck.cn/rss.xml

@蒙需: 如何订阅您的文章,试了 rss 和...

2025-12-29

如何订阅您的文章,试了 rss 和 feed 好像都不行

2025-12-29

原本计划一个人出发的 但是从银川市区到阿拉善盟需要拼车,车上都是志同道合的人便组成了队友

@蒙需: 这类活动队友怎么组成起来的呀 个...

2025-12-26

这类活动队友怎么组成起来的呀 个人貌似也不方便行动。

2025-12-26

全程跟着两步路轨迹走,基本上一路上会有信号,当然一定要组队前往

@小彦: 来看看,沙漠探险有一定风险,要是失...

2025-12-09

来看看,沙漠探险有一定风险,要是失联了怎么办

2025-12-09

@格子老师: 干得漂亮,真厉害

2025-12-06

看着照片 回味曾经去过的地方

@ymz316: 这个的确很有情绪

2025-12-06

这个的确很有情绪

2025-12-06

记录足迹 回忆起来超带感

@Loekman: 不错!对于喜欢旅行的人来说是必备

2025-11-30

哈哈同为折腾党

@寻鹤: 真好,我刚玩的时候就喜欢折腾这样的...

2025-11-30

真好,我刚玩的时候就喜欢折腾这样的,如今地图插件又多了一个版本

2025-11-30

不错!对于喜欢旅行的人来说是必备

2025-11-29

很好!谢谢作者~~强迫症患者的良药

2025-11-22

只要分配的id不冲突就不会出现错误

@天天下载ttzip: 删除没用的ID,后面文章递进,会不...

2025-09-11

查看效果


一、 核心视觉:如何画出一张“便利贴”?

首先是视觉设计。便利贴的灵魂在于“非秩序感”和“纸张质感”。

  1. 随机旋转:现实中的便利贴不可能贴得横平竖直。
  2. 卷角阴影:利用 CSS 的 border-radiusbox-shadow 模拟纸张微微翘起的效果。
  3. 图钉效果:用 CSS 画一个小圆点,配合径向渐变(Radial Gradient)做出金属光泽。

但开发过程中遇到了一个问题:头像变形
很多 Typecho 主题为了响应式,会强制设定 img { width: 100% }。这导致头像被拉伸成了巨大的方块。即使加了 !important 甚至都被主题样式覆盖。

解决方案
我放弃了 <img /> 标签,改用 div 容器配合 background-image。主题的 CSS 只会匹配图片标签,不会影响普通的 div。

/* 核心代码:防拉伸头像容器 */
.note-avatar-bg {
    display: block !important;
    width: 40px !important;    /* 锁死宽度 */
    height: 40px !important;   /* 锁死高度 */
    border-radius: 50% !important;
    /* 关键:使用背景图填充,配合 cover 属性,无论图片比例如何都完美适应 */
    background-size: cover;    
    background-position: center center;
    background-repeat: no-repeat;
    background-color: #e0e0e0;
}

二、 交互体验:赋予便利贴“物理属性”

参考师傅们的留言墙设计了拖拽的效果。

这里没有引入庞大的 jQuery UI 或第三方库,而是用原生 JS 手写了拖拽逻辑。

关键逻辑:

  1. 随机分布:页面加载时,通过 Math.random() 计算每个卡片的 lefttoprotate 角度。
  2. 零延迟拖拽:监听 mousedowntouchstart。为了防止鼠标甩得太快导致“脱手”,移动事件必须绑定在 document 上,而不是元素本身。
// 初始化随机布局片段
for(var i=0; i<notes.length; i++) {
    var n = notes[i];
    // 计算容器内的随机坐标
    var x = Math.random() * (cw - 220);
    var y = Math.random() * (ch - 220);
    // 给它一个 -3度 到 3度 的随机倾斜,看起来更自然
    var r = Math.random() * 6 - 3; 
    
    n.style.left = x + "px";
    n.style.top = y + "px";
    n.style.transform = "rotate(" + r + "deg)";
}

三、 攻克痛点:PJAX 与 QQ 头像

在测试阶段,我遇到了两个 Typecho 插件开发中经典的大坑。

1. PJAX 刷新导致的“堆叠事故”

博客启用了 PJAX 无刷新加载。每次点击页面时,JS 不会重新运行,导致便利贴墙没有进行初始化排版,所有卡片都堆在了左上角 (0,0) 的位置。

解决方法:
引入 MutationObserver 监听器。它就像一个“哨兵”,时刻盯着页面 DOM 的变化。只要发现便利贴墙的容器插入到了页面中,就强制执行排版函数。

// 针对 PJAX 的 MutationObserver 监听
var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        if (mutation.addedNodes.length) {
            var container = document.getElementById("note-wall-container");
            // 只要墙出现了,且还没排版过,立即执行!
            if (container && !container.classList.contains("init-done")) {
                initNoteWall();
            }
        }
    });
});
observer.observe(document.body, { childList: true, subtree: true });

2. QQ 邮箱头像不显示

国内访问 Gravatar 并不稳定,且很多用户只有 QQ 头像。
我在 PHP 中增加了一个正则判断:如果是 QQ 邮箱,直接调用腾讯官方的头像接口;否则使用极客族(Geekzu)的高速 CDN 源。

// PHP 后端判断逻辑
if (strpos($mail, '@qq.com') !== false && preg_match('/^\d+@qq\.com$/', $mail)) {
    $qq = str_replace('@qq.com', '', $mail);
    // 腾讯官方接口,稳!
    $avatarUrl = 'https://q1.qlogo.cn/g?b=qq&nk=' . $qq . '&s=100';
} else {
    // 极客族高速源
    $avatarUrl = 'https://sdn.geekzu.org/avatar/' . md5($mail) . '?s=100&d=mm';
}

四、 逻辑升华:关联评论的“画中画”

最初的版本所有留言都是平级的,看不出谁回复了谁。
为了体现“对话感”,我重写了数据库查询逻辑,使用了 SQL 自连接(Self-Left Join)

在查询每一条评论时,顺便去查询它 parent ID 对应的父级评论内容。如果存在父级评论,就在便利贴下方渲染一个半透明的“引用条”。

// Typecho 数据库查询构造
$select = $db->select('c.*', 'p.author as parentAuthor', 'p.text as parentText')
    ->from('table.comments as c')
    // 左连接:把 table.comments 表连一遍,取名为 p (parent)
    ->join('table.comments as p', 'c.parent = p.coid', Typecho_Db::LEFT_JOIN)
    ->where('c.status = ?', 'approved')
    ->limit($limit);

效果如下图所示,回复的评论会带有一个精致的小尾巴,既不破坏整体美感,又保留了上下文逻辑。
mjwmxzb0.png


从最初简单的 div 堆叠,到解决 CSS 样式冲突,再到适配 PJAX 和 QQ 头像,NoteWall 最终打磨成了一个勉强还能看的 Typecho 插件,后续上传到github开源。