2025年以来,我一直饱受腕管综合征的困扰。为了缓解疼痛,我尝试使用语音进行编码、网络浏览和电脑操作。这并非易事,除非您亲身体验,否则很难理解技术对行动不便人士的敌意有多大。认识我的人都知道,我一直是无障碍网络和无障碍实践的坚定支持者,但这是我第一次经历手部活动受限,我从未意识到让用户只需最少操作就能完成任务的重要性。
使用语音命令突出显示代码块并复制它们极其困难,至少对我来说目前是不可能的(要么真的不可能,要么是我还没找到方法。不用手操作电脑进行网络浏览和编码需要极大的脑力)。因此,在撰写关于代码的文章时,尤其是在创建涉及读者复制粘贴代码的教程时,绝对必须提供一种方法,让手部活动受限的人能够一键复制代码。
在患上腕管综合征之前,我认为复制代码按钮是多余的。但我错了。因此,我的第一个基于语音的编码任务就是在博客文章中所有代码片段添加复制代码按钮。我正在撰写另一篇博客文章,讲述我的语音编码历程,但如果您感兴趣,我一直在使用的工具是VSCode中的Talon和Cursorless。用语音重新学习如何在电脑上完成所有操作需要一个陡峭的学习曲线,但这整个过程已经让我减轻了一些疼痛。是的,我尽可能地用语音撰写这篇博客文章。
我的复制代码片段按钮解决方案是用纯HTML、CSS和JavaScript在使用JavaScript模板引擎的Eleventy项目中编写的(因此使用了带花括号的字符串插值)。
HTML(以及一些构建HTML的初步JavaScript)
在关于代码的博客文章中,您可能在一页上有多个代码块片段。因此,您需要为每个代码块分配一个唯一的ID,以便定位要复制的正确内容。您可以通过任何您喜欢的方式生成唯一的ID,例如使用外部库来生成,但这是我在构建时为每个代码片段所做的。
function makeId(length) { let result = ""; const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; const charactersLength = characters.length; let counter = 0; while (counter < length) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); counter += 1; } return result; }
鉴于格式化和语法高亮的代码块将包含额外的HTML和CSS类来增强格式和高亮显示,我们需要确保复制按钮仅将**原始代码内容**复制到剪贴板。我的解决方案是将原始代码字符串存储在元标记中,以便在JavaScript中轻松检索(与去除多余的HTML标记相比;即使那样,我们也不想从HTML代码片段中去除HTML标记!)。在元标记中存储原始代码字符串时,您还需要使用`encodeURIComponent`,这样代码就不会在页面上执行(例如JavaScript代码)。此元标记位于我博客文章中每个代码块的旁边。
<meta data-code-id="${thisCodeID}" data-code-to-copy="${encodeURIComponent(codeSnippet)}">
接下来,在代码块旁边或代码块内添加一个按钮,引用您之前创建的唯一标识符。我还选择在按钮文本旁边添加一个小剪贴板SVG图标。如果您选择省略按钮文本而只使用图标,请确保使用`aria-label`来确保按钮具有辅助技术(如屏幕阅读器)可以理解的可访问名称(例如,“复制代码片段”)。
复制
CSS样式
我不会规定如何在您自己的博客文章中设置此复制按钮的样式,但我选择将其绝对定位在每个代码块的右上角。确保您在按钮上包含焦点、活动和焦点可见的样式,以确保那些不用鼠标阅读博客文章并使用键盘或语音导航可点击元素的人清楚地知道哪个元素当前处于焦点状态以及已被点击。
JavaScript代码
最后,使用JavaScript查找页面上的每个复制按钮,并为每个按钮添加以下事件侦听器。此代码从按钮中获取原始代码片段的唯一标识符,查找相关的元标记,并将存储在该元标记中的原始代码复制到剪贴板。确保使用`decodeURIComponent`将原始代码片段复制到其原始形式。
function makeId(length) { let result = ""; const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; const charactersLength = characters.length; let counter = 0; while (counter < length) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); counter += 1; } return result; }
此解决方案可以很好地转移到您最喜欢的前端框架。记住,暂时性的残疾可能发生在任何人身上;我们谁都不是不朽的。
以上是如何构建复制代码片段按钮及其重要性的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

WebStorm Mac版
好用的JavaScript开发工具