前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >添加 CopyCode(复制代码)功能

添加 CopyCode(复制代码)功能

作者头像
Dabenshi
发布2024-04-03 09:09:55
2200
发布2024-04-03 09:09:55
举报
文章被收录于专栏:Dabenshi

Jаvascript

为代码块添加一个"复制代码"按钮,并实现点击按钮后将代码块的内容复制到剪贴板中。

  1. 首先通过document.querySelectorAll('pre')获取所有<pre>元素(即代码块)。
  2. 使用forEach方法遍历每个代码块。
  3. 创建一个文本元素 copyButton,设置其class为"copy",并将显示文本设置为"复制代码"。
  4. 创建一个容器元素 container,设置其class为"code-container",并将复制按钮添加到容器元素内。
  5. 将容器元素插入到代码块之前。
  6. 设置容器元素样式,使其定位为相对定位(position: relative)。
  7. 设置复制按钮样式,使其绝对定位于容器元素的右上角。
  8. 为复制按钮添加点击事件监听器。
  9. 在点击事件处理函数中,获取代码块的文本内容。
  10. 创建一个临时的 <textarea> 元素,并将代码块的内容设置为其值。
  11. <textarea> 元素追加到 <body> 中。
  12. 选中 <textarea> 中的文本。
  13. 执行复制操作,将选中的文本复制到剪贴板中。
  14. 移除临时的 <textarea> 元素。
  15. 修改复制按钮文本为"复制成功"。

这段代码的作用是为网页中的代码块添加一个复制按钮,方便复制代码片段。

代码语言:javascript
复制
var codeBlocks = document.querySelectorAll('pre');
codeBlocks.forEach(function(codeBlock) {
  var copyButton = document.createElement('text');
  copyButton.className = 'copy';
  copyButton.textContent = '复制代码';


  // 创建包裹代码块和按钮的容器元素
  var container = document.createElement('div');
  container.className = 'code-container';

  // 将按钮添加到容器元素内
  container.appendChild(copyButton);

  // 将容器元素插入到代码块之前
  codeBlock.parentNode.insertBefore(container, codeBlock);

  // 设置容器元素样式,使其定位为相对定位(position: relative)
  container.style.position = 'relative';

  // 设置复制按钮样式,使其绝对定位于容器元素的右上角
  copyButton.style.position = 'absolute';
  copyButton.style.top = '8px';
  copyButton.style.right = '10px';

  copyButton.addEventListener('click', function() {
    // 获取代码块的文本内容
    var code = codeBlock.textContent;

    // 创建一个临时的textarea元素,并将代码块的内容设置为其值
    var textarea = document.createElement('textarea');
    textarea.value = code;

    // 将textarea元素追加到body中
    document.body.appendChild(textarea);

    // 选中textarea中的文本
    textarea.select();

    // 执行复制操作
    document.execCommand('copy');

    // 移除临时的textarea元素
    document.body.removeChild(textarea);

    // 修改复制按钮文本为“已复制”
    this.textContent = '复制成功';
  });
});

CSS

用于设置复制按钮和代码块的样式。具体样式如下:

  1. .code-wrapper 类选择器用于设置包裹代码块的容器元素的样式。在这里设置了相对定位(position: relative)。
  2. .code-block 类选择器用于设置代码块的样式。在这里设置了相对定位(position: relative)。
  3. .copy 类选择器用于设置复制按钮的样式。具体样式如下:
    • font-size:设置字体大小为 13px。
    • transition:设置颜色变化的过渡效果为 0.1秒。
    • color:设置按钮的颜色为带透明度的灰色(hsla(0, 0%, 54.9%, 0.8))。
    • border:去掉按钮的边框。
    • border-radius:设置按钮的圆角为4px。
    • cursor:设置鼠标悬停在按钮上时的样式为指针。
    • z-index:将复制按钮的层级置于顶层,确保按钮显示在其他内容之上。

这些样式可以使用在前面提到的 jаvascript 脚本中的相关元素上,以实现更好的外观和交互效果。

代码语言:javascript
复制
.code-wrapper {
  position: relative;
}

.code-block {
  position: relative;
}

.copy {
  font-size: 13px;
  transition: color 0.1s;
  color: hsla(0, 0%, 54.9%, 0.8);
  border: none;
  border-radius: 4px;
  cursor: pointer;
  z-index: 1; 
}

主页</body>之前插入js、css

代码语言:javascript
复制
<!--Copy code-->
 <link href="{THEME}/js/copy/copy.css" rel="stylesheet"/>
 <script src="{THEME}/js/copy/copy.js"></script>
<!--/Copy code-->
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档