前端技术文章
-
实现模态层时,inert 负责让背景区域真正停止交互,dialog 与 aria-modal 负责表达语义,关闭时再把焦点还给触发按钮,避免键盘用户迷路。430 收藏 -
这篇教程不会只停留在零散知识点上,而是借助一个完整的项目案例,把 TypeScript 的各种特性系统地串联起来、用起来。 从项目搭建一路讲到真实开发场景,把 TypeScript 在实际项目里到底怎么用,完整地呈现出来。 项目实战:任务管理系统 前端 (React + TS) Vite + Rea428 收藏 -
用一个可运行的 Web Streams 示例拆开 TransformStream 背压:看清 ReadableStream、writableStrategy 和 WritableStream 之间的队列边界,并处理 flush 与 abort。428 收藏 -
CSS Masonry 仍处于早期开发阶段,实际项目应先用稳定的 CSS Grid 或多列方案兜底,再逐步验证列数、图片尺寸、阅读顺序和浏览器支持。本文用一组可回退的卡片布局说明列高差、图片加载和无障碍顺序的处理边界。424 收藏 -
fetch 的 catch 不能单独证明是 CORS 还是断网。本文用 Response.ok、AbortError、Console、Network 和服务端日志建立一套可执行的判断路径。424 收藏 -
前端用 URL.createObjectURL 预览 File 或 Blob 时,revokeObjectURL 不能机械地立刻调用。本文按图片加载、替换预览、组件卸载和下载链接四种边界,说明什么时候释放对象 URL 才不会让资源提前失效。422 收藏 -
前端已经发布新代码,浏览器却仍加载旧 JS,通常不是缓存策略一个开关的问题,而是入口 HTML、资源哈希和上传顺序没有形成闭环。本文用一个可复查的发布流程拆开判断。421 收藏 -
IndexedDB 的 readwrite 事务不是可以任意 await 的长连接。本文解释请求回调、事件任务与自动提交的关系,并给出连续写入、跨异步边界拆分事务和提交结果判断的实用写法。419 收藏 -
文章 · 前端 | 2星期前 | 前端 · javascript · Service Worker CacheStorage Cache API caches.open caches.match caches.delete
用 Cache API 为离线资源建立版本化缓存,覆盖 caches.open、cache.addAll、caches.match 与 caches.delete 的协作方式,并处理新版本缓存失败、旧缓存清理和网络回退边界。418 收藏 -
从登录状态、编辑草稿和多窗口协作三个场景出发,对比 BroadcastChannel、localStorage 的 storage 事件与 SharedWorker 的消息路径,给出选择边界和可验证的最小实现。418 收藏 -
Service Worker 的 fetch 事件不是所有请求都适合缓存。本文用同源、GET、路径和请求意图四个条件建立绕过清单,给出静态资源缓存、动态接口放行和旧缓存清理的最小实现。418 收藏 -
本文详解如何正确实现递归函数,用于检测由 QuestionModel 和 ResponseModel 两类对象嵌套构成的 JSON 结构中,每一层级内是否存在重复的 label 值,并修复原逻辑中因过早 return 导致递归提前终止的缺陷。 这段内容主要讲清楚一件事:怎样把递归函数写对,用来检查由417 收藏 -
跨文档 View Transitions 不是给单页应用换皮:当前页和目标页要同源并同时用 @view-transition 选择加入,元素命名还要避免冲突。本文从多页站点导航现场出发,给出最小接入、滚动位置处理、浏览器降级和上线验收清单。412 收藏 -
Promise.withResolvers() 把 promise、resolve、reject 放到同一作用域,适合事件回调和外部控制场景。本文从旧构造器写法迁移,说明异常收口、一次性结算与兼容回退。412 收藏 -
TypeScript中的泛型堪称是一项极为强大的工具,利用它,我们能够编写出更为灵活且具备高度可重用性的代码。泛型的独特之处在于,它允许我们在定义函数、类或者接口的时候,运用类型参数来代表那些尚未明确的类型。在泛型的应用场景中,常见的类型参数命名约定有T、K以及V。当你第一次看到 TypeScrip411 收藏