事件冒泡/捕获演示 - 交互模型可视化
嵌套的彩色方块,点击内层观察事件传播顺序,直观理解addEventListener的第三个参数。
UD5工具箱
直观对比 Debounce(防抖)与 Throttle(节流)在事件处理中的行为差异。理解何时使用防抖、何时使用节流,优化前端性能。
| 模式 | 总触发次数 | 总执行次数 | 执行率 | 节省调用 | 适用场景 |
|---|---|---|---|---|---|
| Normal | 0 | 0 | 100% | 0 次 | 需要实时响应的场景 |
| Debounce | 0 | 0 | 0% | 0 次 | 搜索建议、窗口resize、表单验证 |
| Throttle | 0 | 0 | 0% | 0 次 | 滚动加载、按钮防重复提交、游戏帧率 |
防抖的核心思想是"等你停下来再说"。当事件被连续触发时,防抖会不断重置计时器,只有在事件停止触发且经过了指定延迟时间后,回调函数才会执行一次。典型应用场景:搜索框输入建议、窗口大小调整后的重新布局。
节流的核心思想是"按固定节奏来"。无论事件触发多频繁,节流保证回调函数在每个指定的时间间隔内最多执行一次。首次触发通常立即执行(leading edge)。典型应用场景:滚动事件加载更多、按钮防重复点击、游戏中的帧率控制。
用防抖:当你关心"最终结果",不关心中间过程。比如用户输入搜索词,你只关心他最终输入了什么。
用节流:当你需要"持续但不过度"的反馈。比如页面滚动时检查是否要加载更多内容,需要定期检查但不能太频繁。
搜索建议:200-400ms(平衡响应与性能)
窗口resize:150-300ms(避免频繁重绘)
滚动加载:100-250ms(保持流畅体验)
按钮防重复:500-1000ms(防止误操作)
游戏输入:16-33ms(配合60fps刷新率)
Trailing(尾部执行):事件停止触发后等待delay再执行,这是最常见的防抖模式。
Leading(头部执行):首次触发立即执行,然后忽略后续连续触发直到停止。Lodash等库同时支持两种模式,甚至可以在首尾都执行。
可以!对于动画和渲染相关的场景,requestAnimationFrame是更好的节流方式,它能自动同步到浏览器刷新率(约60fps)。但对于网络请求、状态更新等非渲染场景,使用时间戳的节流更合适,可以自定义更长的间隔来减少请求频率。
嵌套的彩色方块,点击内层观察事件传播顺序,直观理解addEventListener的第三个参数。
在 Favicon 上叠加未读消息数量的数字角标,生成相应 JS 代码。
演示元素进入视口时触发懒加载和曝光埋点,并展示当前可见比例。
模板化记录团队成员昨日完成、今日计划与阻塞项,支持导出Markdown便于分享。
利用Canvas将摄像头画面或图片实时切割并多重镜像,形成动态万花筒视觉效果。
输入字符串并使用 URL.canParse() 判断是否为有效 URL,不抛出异常。
使用多个哈希函数和位数组,演示布隆过滤器的添加和查询,计算误判率。
设定储蓄目标金额,每次记录存入金额,环形图显示完成百分比,激励达成财务目标。
输入正则表达式,检测潜在的指数级回溯陷阱,避免服务器性能被恶意输入拖垮。
粘贴 assetlinks.json 内容,检查是否符合 TWA 打包要求,帮助将 PWA 上架应用商店。
选择肤质与目标,生成早间晚间护肤步骤,并记录完成情况。
定义脱敏规则(如手机号中间4位星号,邮箱部分隐藏),对 JSON 或 CSV 数据执行批量掩码。
利用浏览器Crypto API生成密码学安全的随机字节序列及对应的整数和十六进制。
粘贴Shadow DOM代码,直观预览封装组件内部的CSS作用域及其对外界的影响。
添加股票代码、加密货币或自定义资产,手动输入价格或获取公开API(演示)以追踪变化。
逐步演示OAuth2授权码、隐式及密码模式交互流程,帮助理解重定向、Token交换与刷新机制。
输入日期和数值,生成类似GitHub贡献图的年度热力图,可自定义颜色和统计。
从内置库随机选取主流浏览器的User-Agent字符串,一键复制用于请求头。
从任意分布中抽取样本并绘制均值分布直方图,随着样本量增大趋近正态分布。
以节点图展示链表的插入、删除、反转等操作,直观理解指针变化。
在图片上叠加倾斜雨丝和雾气,并调节雨的密度和速度,可导出动画GIF。
输入包含隐私信息的文本,一键将手机号、身份证等部分遮盖。
团队成员在会前用温度计匿名标情绪,汇总显示利于主持人引导。
分解查询参数,高亮可能存在的SQL注入或XSS模式,辅助安全审查。
输入长链接,生成一个伴随随机短码的完整离线URL(可自定义域名前缀)。
调用设备联系人选择界面,获取用户选中的联系人信息(需支持环境)。
模拟接收包含一次性密码的短信,展示 navigator.credentials.get({otp}) 如何自动提取 OTP 并填入表单。
编写正则表达式并指定替换模式(如 '$1-$2'),实时查看文本替换结果,支持命名捕获组。
选择文件夹并上传,保留相对路径,以树形结构展示所有文件并读取内容。
选择季节与天气情况,模型估算花粉浓度等级与防护建议,过敏人群出行参考。