目录
HTML(以及一些构建HTML的初步JavaScript)
首页 web前端 js教程 如何构建复制代码片段按钮及其重要性

如何构建复制代码片段按钮及其重要性

Jan 25, 2025 am 12:31 AM

How to build a copy code snippet button and why it matters

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)}"></meta>

接下来,在代码块旁边或代码块内添加一个按钮,引用您之前创建的唯一标识符。我还选择在按钮文本旁边添加一个小剪贴板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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

console.log输出结果差异:两次调用为何不同? console.log输出结果差异:两次调用为何不同? Apr 04, 2025 pm 05:12 PM

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...

See all articles