IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:JavaScript

共 776 篇相关文章

IT 累计浏览 80

全是好东西!HTML command属性和JS toggle事件

本文介绍了HTML的新属性command和commandfor,用于触发元素的内置方法。command属性设置在按钮元素上,通过commandfor属性以ID关联目标元素,调用其DOM方法,例如使用command="show-modal"显示dialog弹框。对于自定义行为,需监听command事件,使用如"--radius"的命令名称来触发。文章测试了兼容性,发现commandfor已获主流浏览器支持。接着讨论了JS的toggle事件,包括beforetoggle和toggle事件类型,适用于Popover、dialog和details元素的状态变化。事件对象提供newState和oldState属性来判断显示或隐藏状态。新增的event.source属性可返回触发事件的目标元素,但仅在command指令触发时有效,其他关闭方式返回null。文章建议通过submit事件或cancel事件来区分弹框关闭来源。整体以教程形式呈现,包含代码示例和实时渲染效果,帮助开发者理解和应用这些前端新特性,增强UI交互能力。

IT 累计浏览 127

Prop For That

Prop For That 是 Adam 推出的前端工具,创新性地扩展了 CSS 自定义属性功能。该工具通过 JavaScript 在后台监听浏览器事件和状态变化,将通常无法由 CSS 直接访问的数据(如光标位置、滚动速度、表单状态和当前时间)映射为实时 CSS 属性。开发者只需导入库,在 HTML 元素上添加特定数据属性(例如 data-props-for='pointer'),即可在 CSS 中使用对应的自定义属性(如 --live-pointer-x 和 --live-pointer-y),直接在样式表中实现动态效果,无需编写额外 JavaScript 代码。文章通过代码示例和 CodePen 演示展示了如何利用该工具创建光标跟踪等交互界面,突出了其视觉吸引力。整体上,Prop For That 简化了前端开发中动态样式与浏览器数据的整合,提升了开发效率和代码可维护性,为社区提供了新的工具选择。

IT 累计浏览 55

如何:不借助第三方服务粗略检测访客是否来自中国大陆

作者在处理网站前端需求时,需要检测中国大陆访客以优化服务加载。传统IP地址检测方案因涉及CDN、真实IP获取和外部依赖而显得复杂。通过AI辅助,作者发现可以基于浏览器时区进行轻量级检测。中国大陆用户的设备时区通常为Asia/Shanghai、Asia/Chongqing等,使用JavaScript的Intl API可以获取当前时区并比对。具体实现包括定义时区字典和编写UserInChina函数,代码简洁且包含错误处理。该方法无需服务器交互,完全在客户端执行,提升了隐私性和性能。尽管时区检测不是绝对准确,但足以满足实用需求,尤其适合快速部署和低资源场景。文章强调了利用原生前端API解决特定问题的高效性,为开发者提供了参考。

IT 累计浏览 63

Locale-sensitive text segmentation in JavaScript with Intl.Segmenter

Intl.Segmenter是JavaScript中新增的API,专门用于处理本地化敏感的文本分割任务。该API能够根据不同的语言环境,正确地分割单词、句子和其他文本单元,从而简化国际化开发过程。通过使用Intl.Segmenter,开发者可以轻松统计不同语言中的单词数量或句子数量,这对于构建多语言应用至关重要。传统方法在处理如中文、日文等无明确分隔符的语言时存在局限,而Intl.Segmenter通过语言环境参数和Unicode规范,智能识别文本边界。开发者可指定分割粒度,如单词、句子或字素,并支持异步处理以优化大型文本操作。实际应用场景包括内容管理系统的文本长度统计、聊天应用的消息分割以及搜索功能的精确匹配。本文结合实例代码,演示基本用法和参数设置,并探讨性能优化策略。掌握Intl.Segmenter能帮助前端开发者解决本地化挑战,确保应用全球化环境中的用户体验一致性和准确性。

IT 累计浏览 126

新特性速递:focus()行为新增focusVisible控制

浏览器原生focus()方法新增focusVisible参数,可精准控制元素获取焦点时是否显示默认的outline轮廓样式。默认情况下,通过JavaScript主动调用focus()触发焦点时,部分浏览器不会显示焦点轮廓,导致用户无法直观感知焦点位置。focusVisible参数允许开发者显式强制显示或隐藏该轮廓,例如设置`focus({focusVisible: true})`即可让链接或按钮在程序化聚焦时呈现明显的视觉提示,提升无障碍体验;反之设置为false则可抑制轮廓显示。该特性提供了比传统CSS选择器`:focus-visible`更直接的编程控制方式,尤其适用于需要统一管理焦点视觉反馈的交互场景。作者同时指出,尽管该特性对用户体验有益,但受兼容性和国内开发环境影响,实际应用前景可能有限。

IT 累计浏览 93

Cross-Document View Transitions: Scaling Across Hundreds of Elements

跨文档视图转换(Cross-Document View Transitions)在从简单示例扩展到包含数百个元素的实际产品页面时,面临显著挑战。核心难题在于每个视图转换名称必须唯一,导致为每个元素单独编写动画样式的CSS规则呈爆炸式增长,难以维护。文章探讨了两种高效解决方案。其一是利用`view-transition-class`属性为同类元素分组,配合通配符选择器(如`::view-transition-group(*.card)`)用寥寥数行CSS统一控制所有同类元素的动画,无论数量多少。其二是采用“按需分配”策略,不在页面加载时为所有元素预设名称,而是通过`pageswap`和`pagereveal`事件,在用户交互(如点击)的精确时刻为涉及的元素动态添加与移除视图转换名称。这种方式避免了浏览器为未参与过渡的数十个元素进行无用快照和计算,显著提升了中低端设备上的性能。文章还提及了一个理想的纯CSS方案(使用`ident()`函数),但指出其尚未被浏览器支持,因此上述基于现有标准的模式是当前实现规模化过渡的实用路径。

IT 累计浏览 44

JSON.rawJSON方法的作用是什么?

JSON.rawJSON方法是JavaScript中用于解决JSON.stringify序列化时精度丢失问题的实用工具。它允许开发者创建一个原始JSON对象,当这个对象被stringify序列化时,会将传入的JSON文本原样输出,不进行转义或修改。这主要解决了超大整数或BigInt类型数据在序列化时因浮点数精度限制导致的错误,例如超过2^53的整数会被自动四舍五入,而rawJSON能保持原值和数字类型,避免后端接口接收异常。使用时,必须传入合法的JSON原语(如数字、字符串、布尔值或null),不能是

IT 累计浏览 35

A Scrollytelling Gift for Mum on Mother’s Day 2026

作者以纪念母亲的名义,运用前沿Web技术构建了一个交互式“滚动叙事”虚拟礼物。文章核心展示了如何利用新兴的CSS滚动吸附(Scroll Snap)事件与查询功能,实现基于滚动的页面切换与动态内容触发。作者详细阐释了技术实现:通过设置`scroll-snap-type`和`scroll-snap-align`定义吸附容器与目标,再借助`scrollsnapchanging`与`scrollsnapchange`的JavaScript事件监听,在用户滚动至“白天”或“夜晚”面板时,触发不同的动画逻辑。这种方法实现了确定性过渡与随机性元素(如UFO飞行路径、文字物理效果)的结合,创造了独特的交互体验。文章同时将技术选择与设计哲学相联系,说明如何用交互式故事和逻辑来应对混沌世界的灵感来源,本质上是一次将前沿浏览器特性(目前主要支持Chromium内核)应用于创意表达的教程式实践。

IT 累计浏览 48

Soon We Can Finally Banish JavaScript to the ShadowRealm

本文深入解析了TC39正在提案的JavaScript ShadowRealm API。文章首先厘清了JavaScript的“单线程”特性,指出其更准确的表述是每个“领域”单线程执行。一个JavaScript应用可以拥有多个相互隔离的领域,每个领域拥有独立的全局对象与内置对象,但领域间的通信和资源访问受限。现有领域机制虽能提供一定隔离,但不足以满足将不可信或需隔离的代码(如第三方库、测试代码)安全沙箱化的需求。 ShadowRealm正是为解决此问题而提出的新概念。它创建了一种特殊领域,该领域拥有自己干净的全局环境与内置对象,但代码仍共享宿主领域的主线程执行,从而避免了多线程通信的复杂性。这使得开发者可以轻松创建一个与主应用环境完全隔离的“洁净室”,在其中执行代码而不用担心污染全局作用域或相互干扰。尽管ShadowRealm提供了强大的隔离能力,但文章也明确指出它主要是一个完整性边界,而非绝对安全边界。其API设计(通过`evaluate`方法执行代码)与`eval`有相似之处,核心价值在于提供了一种轻量级、无新线程开销的代码隔离方案,特别适用于构建可靠的测试环境或封装不受信任的代码。

IT 累计浏览 36

Cross-Document View Transitions: The Gotchas Nobody Mentions

本文针对跨文档视图转换(Cross-Document View Transitions)在实际实施中遇到的隐蔽问题,进行了深入的故障排查与解析。作者指出了一个关键的技术演进:早期文档中常见的``启用方式已被废弃,当前正确的启用方式是通过CSS的`@view-transition`规则,这提供了更细粒度的控制能力,例如可根据媒体查询条件启用。文章重点剖析了导致转换静默失败的两大核心陷阱。其一是跨文档转换存在一个严格的4秒超时限制,若新页面在导航开始后的4秒内未达到可渲染状态,转换将直接终止。此问题在本地环境难以复现,但在生产环境因网络延迟或资源加载阻塞而极易出现。作者建议通过`pagereveal`事件监听调试此类失败,并可通过``提示浏览器等待关键元素就绪,以平衡渲染时机。此外,文章提及了转换过程中可能出现的图像比例扭曲等视觉问题,并预告了下一部分将探讨在大规模元素下管理`view-transition-name`的扩展性方案。

IT 累计浏览 42

Rethinking “Pixel Perfect” Web Design

文章探讨了网页设计中“像素完美”概念的过时性及其现代替代方案。它追溯了该概念源于印刷时代,被早期网页开发者沿用,但在当前多设备、动态内容的网络环境中已显现出根本性缺陷:定义模糊、无法适应多样化视口、破坏组件系统、增加技术债务并常与可访问性冲突。文章主张应摒弃对静态像素值的执着,转向理解并实现“设计意图”。这意味着使用流体单位、CSS容器查询等现代工具,通过设计令牌来同步逻辑关系,使布局能智能适应各种环境。最终,设计目标应从匹配静态样稿转变为确保核心视觉逻辑与完整性在任何设备或上下文中都能被恰当地传达和执行,这要求设计与开发工作流基于共享的、活的设计系统而非静态文件交接。

IT 累计浏览 60

Getting Started With The Popover API

本文探讨了使用浏览器原生 Popover API 构建工具提示(Tooltip)相对于传统 JavaScript 库方案的显著优势。传统实现中,开发者需要自行处理复杂的交互逻辑,如键盘导航(Esc 键关闭)、屏幕阅读器的 ARIA 状态同步、焦点管理以及鼠标快速移动导致的闪烁问题,这往往使代码变得脆弱且难以维护。 采用 Popover API 后,浏览器原生接管了核心行为:工具提示在键盘焦点下自动显示,并可通过 Esc 键可靠关闭,消除了自定义键监听的需求。对于辅助技术,浏览器能更稳定地播报带有正确 `role="tooltip"` 的弹出内容,减少了无障碍性错误。焦点管理也得到简化,浏览器确保焦点能自然移入弹出框并在关闭时返回触发元素,无需开发者手动编写焦点恢复逻辑。 作者指出,尽管 Popover API 在一些细节上仍在演进,但它代表了平台能力的提升——将工具提示从需要模拟的行为转变为浏览器原生理解的交互模式。这不仅减少了代码量,更重要的是降低了开发者的心智负担,使最简单的实现也能达到很高的正确性。对于追求简洁与可维护性的场景,用 Popover API 替换现有工具提示是一个值得尝试的实验。

IT 累计浏览 33

Moving From Moment.js To The JS Temporal API

本文探讨了 JavaScript 日期处理从 Moment.js 向内置 Temporal API 的技术演进。Moment.js 因功能强大曾被广泛采用,但其体积庞大、对象可变(易引发副作用)以及库已进入维护模式,促使开发者寻求更现代的解决方案。Temporal API 作为 ECMAScript 标准的新成员,旨在填补原生 Date API 的不足并解决 Moment.js 的遗留问题。 其核心优势在于设计层面的改进:所有 Temporal 对象默认不可变,确保操作安全;原生支持时区且精度达纳秒级;月份采用更符合直觉的 1-based 索引;作为浏览器内置 API,零额外包体积。文章通过代码示例,对比了从创建对象、字符串解析到输出格式化等关键操作在两种 API 间的差异。Temporal 在可靠性上更强,例如严格遵循 ISO 8601/RFC 9557 解析标准,避免歧义猜测,但也意味着需要将非标准格式的字符串预处理为标准格式。格式化方面,Temporal 依赖 `Intl.DateTimeFormat`,虽能生成本地化字符串,但不如 Moment 的 token 方式灵活直接。 整体而言,迁移到 Temporal 代表了向更标准、可靠且轻量级的原生解决方案的过渡,尽管其 API 更为严格,但能提升代码的长期可维护性与健壮性。

IT 累计浏览 43

务必谨慎使用JS WeakRef弱引用

本文解析JavaScript中WeakRef弱引用的特性和使用场景,并强调其谨慎使用原则。WeakRef与WeakMap、WeakSet同属弱引用机制,但它是对单个对象的包装,允许通过`.deref()`方法检查对象是否已被垃圾回收。文章列举了WeakRef在缓存、DOM元素临时引用、事件监听管理、对象池和打破循环引用等场景的应用,指出其核心优势在于不阻止垃圾回收,从而辅助避免内存泄漏。然而,作者重点警示WeakRef行为具有不可预测性——垃圾回收时机取决于引擎实现且无法确定,可能导致数据意外丢失或资源释放延迟。因此,除缓存等特定场景外,更推荐通过主动清理引用(如使用AbortController移除事件监听)进行资源管理,而非依赖弱引用的不确定性。在绝大多数前端开发中,优先遵循常规的引用管理即可,仅在面临显著内存压力时才考虑WeakRef作为优化手段。

IT 累计浏览 41

借助mediabunny纯JS实现视频水印、剪裁、合成等功能

mediabunny是一个基于WebCodecs API封装的前端媒体处理工具包,能够实现视频格式转换、压缩、水印添加、剪裁与音视频合成等功能。文章通过三个具体案例展示了其核心实现:首先,利用Conversion.init解码视频每一帧并绘制在OffscreenCanvas上,将水印图片与画面重新合成,从而实现水印叠加;其次,通过设置trim参数的起止时间,对视频进行首尾片段剪裁;最后,通过创建CanvasSource和AudioBufferSource分别添加视频与音频轨道,并逐帧绘制画面与拼接音频,完成多轨媒体的合成输出。该工具包简化了传统依赖原生WebCodecs API的复杂流程,使得纯前端进行多样化的视频处理操作成为可能,适用于内容创作、格式适配等多种应用场景。

IT 累计浏览 177

如何使用CSS判断鼠标从哪个方向进入元素?

这篇讲的是前端开发中一个很实用的细节:如何用纯CSS或结合少量JS,来精准判断鼠标是从哪个方向进入一个元素的。作者从常见的菜单悬停效果切入,直接对比了两种主流思路。一种是利用JavaScript监听事件来计算方向,另一种则是通过巧妙的CSS变量与伪元素配合,仅用`mouseenter`触发就能实现方向感知。文章不仅展示了最终效果,还拆解了每种方案的核心实现逻辑,比如CSS方案中如何通过过渡属性控制伪元素的“展开”动画,从而自然呈现进出方向。作者对比了两种方案的代码量、性能开销以及适用的场景,指出纯CSS方案在轻量级交互中更显优雅,而JS方案在复杂逻辑中则更灵活。读完后,你不仅能直接套用代码,更能理解这些技术选择的权衡点。

IT 累计浏览 2,747

你老了

这篇讲的是一位技术人的“年龄焦虑”与自我和解。作者从自己在用友、锤子科技,到极客邦创业的经历切入,发现自己一路走来,竟从团队里最年轻的变成了最年长的那个——入职极客邦的第一天,就成了公司年龄最大的人。 文章的核心并非抱怨,而是通过这些个人观察与同行趣事,引出了一个更普世的思考:我们是如何看待衰老的?作者坦言,人过四十,所谓的“不惑”更像是接受“有些事再也想不明白”的现实,而午夜梦回时,对青春理想的追问仍会惊出一身冷汗。 但他最终的态度是清醒而积极的。他援引姜文的“不怕老”,提到七十多岁的创作者依然笔耕不辍,并认为当代的技术人,尤其是七零后、八零后,很可能将“精力充沛地工作到七十岁甚至八十岁”。全文用一种混合了自嘲、哲思与幽默的笔调,探讨了成长、边界与梦想的消逝,最终回归到一个朴素的观点:认清年龄的边界,或许才是真正的超越。

IT 累计浏览 1,514

浅谈阿里前端的多样化

这篇讲的是阿里前端团队如何跳出传统 Web 开发的范畴,在互动体验、业务搭建乃至 Serverless 等多个领域发挥关键作用。作者从有趣的 Atwood 定律(所有应用最终都会用 JavaScript 编写)出发,结合阿里内部的实践,展示了前端技术的边界如何被不断拓宽。 文章以“双十一”等大型活动为例,详细介绍了前端如何驱动从“网页特效”到大型游戏化互动产品的演变,并构建了一套集框架、素材中心和研发平台于一体的互动技术体系。同样,在低代码搭建领域,前端工作也从单纯页面交付,演变为贯穿选品、算法、跨端渲染等完整业务链条的产品工程。 更深入的变革来自 Serverless。它让前端工程师得以摆脱运维和底层架构的束缚,有机会转型为离业务更近的“产品工程师”,从而重新定义前后端的协作边界。作者认为,这种角色演变正是前端多样化发展的必然方向。文章最后借 Reg Braithwaite 的箴言提醒我们:技术的强大在于无所不能,而挑战在于如何明智地选择与运用。

IT 累计浏览 2,102

浅谈 Web 应用的内存优化

这篇讲的是在复杂Web应用和Node.js服务端环境中,为何以及如何进行JavaScript内存优化。 作者从Web应用复杂度提升、需长时间运行的背景出发,点明了自动内存管理机制下常被忽视的内存问题。文章不仅梳理了深拷贝、闭包等基础概念,更将重点放在了开发实践中的具体注意事项上。 摘要需要体现的核心是那六条实用建议:避免无意创建全局变量(可借助严格模式)、用完大型数据后及时解除引用、减少循环中的频繁对象创建(可借鉴享元模式)、区分内存与缓存并设定过期机制、警惕复杂递归导致的栈溢出,以及对IndexedDB等本地存储进行定期清理,避免浏览器因数据膨胀而崩溃。 文章特色在于它并非泛泛而谈理论,而是紧密结合前端编码场景,通过具体代码示例揭示了常见的内存消耗陷阱。这些基于实际案例的优化要点,能帮助开发者在编码时形成更好的内存意识,从而构建更稳定、流畅的Web应用。

IT 累计浏览 2,085

Javascript创建对象方式总结

这篇文章梳理了在JavaScript中创建对象的多种常见方式,从基础到进阶,覆盖了不同场景下的选择。作者从最简单的对象字面值讲起,逐步介绍了使用new关键字(包括内建和自定义构造函数)、原型方法、Object.create()、Object.assign()以及ES6的class等不同途径。 核心对比在于各方法的实现原理与适用性:对象字面值最为直接快捷;使用new和构造函数(或ES6类)能更结构化地创建多个相似实例,并涉及原型链绑定;Object.create()允许基于现有对象创建新对象,便于实现原型继承;Object.assign()则擅长合并多个源对象的属性,生成新对象。文章也提及了单例模式这种特殊用法。 对于初学者,掌握字面值和构造函数是关键;理解原型与Object.create()有助于深入对象模型;而在需要组合或扩展已有对象时,Object.assign()提供了便利。ES6的class语法糖则让基于类的写法更贴近传统面向对象语言的习惯。整体而言,文章系统梳理了这些方式的异同,为根据项目需求选择合适的对象创建模式提供了清晰参考。