<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>祂科技的博客</title><description>在像素与星光之间写下日常</description><link>https://tkjjava.com/</link><language>zh_CN</language><item><title>AI 协作工作流：从灵感到上线</title><link>https://tkjjava.com/posts/ta-tech-ai-workflow/</link><guid isPermaLink="true">https://tkjjava.com/posts/ta-tech-ai-workflow/</guid><description>不追求神奇的一键生成，而是把研究、实现和验收拆成可以反复使用的节奏。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文是博客联调用的原创示例，不是对博主个人工作经历的陈述。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;先把目标变成能检查的结果&lt;/h2&gt;
&lt;p&gt;“做得精美”可以作为方向，却不能直接作为唯一验收条件。把它拆成几个可观察的结果：首屏只有一个主要视觉焦点，手机没有文字遮挡，文章链接对应正文，减少动态偏好得到尊重。&lt;/p&gt;
&lt;p&gt;给 AI 的任务也应该有边界：指定要修改的页面、保留的设定、不能动的文件，以及需要提供的验证证据。参考图描述外观，测试描述行为，两者并不互相替代。&lt;/p&gt;
&lt;h2&gt;分清实现与证明&lt;/h2&gt;
&lt;p&gt;一次有用的协作可以分成四个环节：检查当前状态、实施局部修改、验证用户能看到的结果、记录剩余问题。遇到失败时先检查输入和版本，不要不断重复同一个动作。&lt;/p&gt;
&lt;p&gt;代码检查通过，只能说明相应的静态检查通过；截图看起来不错，也不能证明菜单、分页或导航可靠。把不同检查的结论写清楚，才不会把“生成成功”误当成“成品完成”。&lt;/p&gt;
&lt;h2&gt;留下可以继续的工程&lt;/h2&gt;
&lt;p&gt;重要修改前保存可恢复副本；实验素材与正式资源分开；没有验收的模型不替换线上使用的资源。交接记录写实际文件、检查结果和下一步，不写笼统的“已全部优化”。&lt;/p&gt;
&lt;p&gt;AI 的价值不只是更快生成内容，更是帮助缩短从问题到证据的距离。一个值得复用的流程，应当让下一次修改更容易验证，而不是留下更多难以解释的文件。&lt;/p&gt;
</content:encoded></item><item><title>晚风与一杯冰汽水</title><link>https://tkjjava.com/posts/ta-tech-evening/</link><guid isPermaLink="true">https://tkjjava.com/posts/ta-tech-evening/</guid><description>给忙碌的页面留一点空白，收藏晚风、光影和不必急着下结论的片刻。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这是一篇为博客阅读体验创作的示例随笔，不代表博主的真实日记。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;不必把每一分钟都写成进度&lt;/h2&gt;
&lt;p&gt;傍晚的天空并不着急。明亮的地方慢慢退到地平线，路边的灯开始接过颜色。冰汽水上的水珠顺着杯壁滑下来，留下一道短暂的痕迹。&lt;/p&gt;
&lt;p&gt;有些画面适合收藏，却未必需要解释。风把树叶吹向同一个方向，窗里的光落在桌角，远处有人经过，声音很快又安静下来。日常里那些微小的变化，并不因为没有结论就失去意义。&lt;/p&gt;
&lt;h2&gt;给页面，也给自己一点留白&lt;/h2&gt;
&lt;p&gt;个人博客可以是作品集，也可以是一扇有风的窗。技术文章记录问题怎样被解决，随笔则允许问题暂时停在那里。两种内容放在一起，才能让一个站点不只是功能清单。&lt;/p&gt;
&lt;p&gt;如果每一处空白都填满，每一个元素都不停地动，读者很难决定在哪里停留。文字旁边留一点呼吸的空间，动效适时停下来，反而更容易让人记住。&lt;/p&gt;
&lt;p&gt;今天的片刻不需要变成宏大的故事。一杯汽水，一点晚风，一张终于看清的天空，就已经足够成为一页。&lt;/p&gt;
</content:encoded></item><item><title>玻璃拟态真正好看的三个条件</title><link>https://tkjjava.com/posts/ta-tech-glass/</link><guid isPermaLink="true">https://tkjjava.com/posts/ta-tech-glass/</guid><description>透明不是目的；层级、对比与背景关系，才决定一张玻璃卡片是否耐看。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文为本站原创设计示例，不是已经完成的全站设计验收报告。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;第一：背景值得被透出来&lt;/h2&gt;
&lt;p&gt;毛玻璃的效果来自前后层关系。背景如果本来就是单一平面，给卡片增加大量模糊并不一定能带来空间感。粉蓝天空、柔和光线或者有节奏的色块，比杂乱截图更适合放在文字卡片背后。&lt;/p&gt;
&lt;p&gt;背景的细节也不能抢走文字注意力。尤其不要把图片中的菜单或标题当作页面装饰，让真实文字再叠在上面。&lt;/p&gt;
&lt;h2&gt;第二：透明不能牺牲可读性&lt;/h2&gt;
&lt;p&gt;对比度需要针对实际背景检查，不是只对照两个颜色值。卡片移到更亮的区域、切换下一幅背景或进入深色模式后，文字都应该保持清楚。&lt;/p&gt;
&lt;p&gt;大部分文章区域可以使用较高不透明度的表面，把明显的玻璃效果留给导航和小型浮层。并不是所有卡片都需要模糊背景。&lt;/p&gt;
&lt;h2&gt;第三：层级比阴影数量重要&lt;/h2&gt;
&lt;p&gt;边框表达边界，阴影表达高度，圆角表达形状。三者各做一件事，不必每一张卡片都同时出现强光晕、厚描边和大阴影。&lt;/p&gt;
&lt;p&gt;最后检查浏览器不支持背景模糊时的效果：卡片仍需有足够稳定的底色，文字不能依赖模糊才看得见。好的玻璃拟态不是“透明得更多”，而是让层级更容易理解。&lt;/p&gt;
</content:encoded></item><item><title>原生 JavaScript 也能写出舒服的交互</title><link>https://tkjjava.com/posts/ta-tech-interaction/</link><guid isPermaLink="true">https://tkjjava.com/posts/ta-tech-interaction/</guid><description>用清晰的状态、语义化 DOM 和少量事件处理，完成筛选、分页与菜单交互。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文为原创示例，讨论本站交互设计原则，并不宣称项目所有交互已经通过验收。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;先写状态，再写动画&lt;/h2&gt;
&lt;p&gt;分类筛选至少有当前分类、当前页和筛选后的文章集合三个状态。切换分类时应该回到第一页，否则之前的第二页可能在新分类里不存在。分页按钮的禁用状态和屏幕阅读器提示，也应由同一份结果计算。&lt;/p&gt;
&lt;p&gt;隐藏文章必须真的退出布局和焦点顺序，不能只把透明度设为零。对简单卡片列表来说，原生 &lt;code&gt;hidden&lt;/code&gt; 属性很直接；动画只是状态变化的辅助。&lt;/p&gt;
&lt;h2&gt;按钮做按钮的事&lt;/h2&gt;
&lt;p&gt;可点击控件使用原生按钮，跳转文章使用链接。菜单按钮同步 &lt;code&gt;aria-expanded&lt;/code&gt;，分页指明当前页，筛选按钮同步 &lt;code&gt;aria-pressed&lt;/code&gt;。这些细节让键盘操作与鼠标操作保持同样的结果。&lt;/p&gt;
&lt;p&gt;播放器收起时保留同一个播放按钮，比再增加一个没有播放意义的图标更清楚。面板隐藏后，内部焦点应该返回可见触点。&lt;/p&gt;
&lt;h2&gt;导航也是生命周期&lt;/h2&gt;
&lt;p&gt;站内局部导航会替换 DOM。缓存里的“已初始化”属性，不代表新按钮真的拥有监听器；重复执行脚本则可能让一次点击触发两次切换。&lt;/p&gt;
&lt;p&gt;应该明确哪些监听只注册一次、哪些属于当前页面。离开页面时释放属于它的全局监听；进入新 DOM 时重新绑定局部控件。验收既要直接打开页面，也要测试离开再返回。&lt;/p&gt;
&lt;p&gt;轻量不等于省略这些边界。交互舒服，往往是因为状态与生命周期足够清楚。&lt;/p&gt;
</content:encoded></item><item><title>让响应式布局不只是在缩小</title><link>https://tkjjava.com/posts/ta-tech-responsive/</link><guid isPermaLink="true">https://tkjjava.com/posts/ta-tech-responsive/</guid><description>从信息优先级出发重新编排移动端，让小屏幕拥有自己的阅读节奏。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文为原创示例文章，用于本站内容与交互验收。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;先决定谁应该先被看见&lt;/h2&gt;
&lt;p&gt;桌面可以同时展示角色、文章和侧栏；手机却不适合把三者等比例挤进一行。对个人博客而言，站点身份与文章是主线，标签和统计是辅助。移动端可以先放介绍，再给角色一个独立区域，然后进入文章列表。&lt;/p&gt;
&lt;p&gt;把角色直接绝对定位到右下角并不足够。文案长度会改变，字体加载会改变尺寸，设备宽度也会改变。布局需要为角色预留空间，而不是希望它恰好没有挡字。&lt;/p&gt;
&lt;h2&gt;检查实际字号，而不只检查 CSS&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;rem&lt;/code&gt; 会受到根字号影响。桌面看起来足够大的摘要，切到手机后可能因为根字号缩小而难以阅读。可以在组件中设定可读性下限，同时保留随用户字号放大的能力。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.article-summary {
  font-size: max(0.875rem, 14px);
  line-height: 1.7;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的 14px 是本博客摘要的局部最低值，不是所有正文的通用标准。长篇正文可以更大，并应根据真实设备的阅读体验调整。&lt;/p&gt;
&lt;h2&gt;验收边界，而不是只看截图&lt;/h2&gt;
&lt;p&gt;至少检查窄屏、常见手机与平板三个宽度：页面没有横向溢出，角色边界不被裁切，介绍与角色不重叠，折叠菜单的按钮可以用键盘操作。再检查长标题、多行摘要和浏览器放大。&lt;/p&gt;
&lt;p&gt;响应式不是让桌面版变小，而是让内容在每种屏幕上都保持合适的优先级。&lt;/p&gt;
</content:encoded></item><item><title>在浏览器里种一片会呼吸的星空</title><link>https://tkjjava.com/posts/ta-tech-starlight/</link><guid isPermaLink="true">https://tkjjava.com/posts/ta-tech-starlight/</guid><description>用 Canvas、缓动曲线与一点克制，让背景动效既有氛围，也不打扰阅读。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文为祂科技博客制作的原创示例文章，用于验证文章阅读与导航，不代表博主已发表的个人经历。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;星空是背景，不是阅读的对手&lt;/h2&gt;
&lt;p&gt;二次元博客的氛围不必依靠密集特效。背景星光只需要给页面一点深度：粒子少一些，速度慢一些，亮度低一些，文字前方保持安静。标题和正文始终应该比装饰更容易看清。&lt;/p&gt;
&lt;p&gt;Canvas 可以把许多粒子画在一个画布里。画布应设置为不可接收指针事件，不为每颗星星创建独立按钮，也不让它进入键盘焦点顺序。&lt;/p&gt;
&lt;h2&gt;用时间计算位置&lt;/h2&gt;
&lt;p&gt;每一帧直接移动固定距离，会让高刷新率屏幕上的粒子跑得更快。更稳妥的方式是保存上一帧时间，使用经过的秒数乘以速度更新位置。切回后台页面后，对时间差设置上限，避免粒子突然跳很远。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let previousTime = 0;
function frame(time) {
  const seconds = previousTime ? Math.min((time - previousTime) / 1000, 0.05) : 0;
  previousTime = time;
  // particle.y += particle.speed * seconds;
  // 在这里清空画布并绘制粒子。
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这只是时间步长示例，不是完整的动画运行器。真正接入页面时还需要管理初始化、尺寸变化、暂停和销毁。&lt;/p&gt;
&lt;h2&gt;停下也是设计的一部分&lt;/h2&gt;
&lt;p&gt;系统要求减少动态时，保留一张静态星空即可；页面隐藏时暂停动画，返回后重置上一帧时间。站内导航离开首页后，取消动画帧并释放监听器。重新进入时只创建一个循环。&lt;/p&gt;
&lt;p&gt;验收不能只看“星星动了”：还要检查手机耗电、背景标签页、连续导航，以及没有动画时内容是否仍然完整。最舒服的星空，是读完文章才发现它一直陪在身后。&lt;/p&gt;
</content:encoded></item></channel></rss>