写文章的时候,作为一名专业的码农,经常会在文章中粘贴一些代码。有的时候代码块比较长,在后期使用中需要复制这段代码就比较麻烦

参考其他比较专业的博客系统,都在代码块上有一个复制代码的按钮。用来快速复制整个代码块的代码。于是我也想给我的博客增加一个这个功能。

注:chrome测试通过。其他浏览器未进行测试。

实现思路:

1、在页面加载完成之后,使用js给每个pre标签增加一个按钮“复制代码”

2、给按钮增加点击事件,点击事件的功能就是复制代码块的内容

实现代码:

css部分,btn-pre-copy是pre标签中使用js增加的“复制代码”按钮。css的作用是让他显示在pre标签的右上角。这里要注意pre标签和按钮中position属性

  1. .content pre{
  2. position: relative;
  3. background-color: #f5f5f5;
  4. border: 1px solid #ccc;
  5. border-radius: 4px;
  6. padding: 10px;
  7. }
  8. pre .btn-pre-copy{
  9. -webkit-user-select: none;
  10. -moz-user-select: none;
  11. -ms-user-select: none;
  12. -khtml-user-select: none;
  13. user-select: none;
  14. position: absolute;
  15. top: 10px;
  16. right: 12px;
  17. font-size: 12px;
  18. line-height: 1;
  19. cursor: pointer;
  20. color: hsla(0,0%,54.9%,.8);
  21. transition: color .1s;
  22. }

js部分,js部分主要是给pre标签增加按钮和实现拷贝部分,我这里拷贝部分的实现是先实例化一个临时的节点textarea,然后吧pre的内容设置进这个临时节点,然后选中内容进行复制,最后销毁这个节点。具体参考代码。js部分有依赖于jquery

  1. $(function(){
  2. //给每一串代码元素增加复制代码节点
  3. let preList = $(".content pre");
  4. for (let pre of preList) {
  5. //给每个代码块增加上“复制代码”按钮
  6. let btn = $("<span class=\"btn-pre-copy\" onclick='preCopy(this)'>复制代码</span>");
  7. btn.prependTo(pre);
  8. }
  9. });
  10. /**
  11. * 执行复制代码操作
  12. * @param obj
  13. */
  14. function preCopy(obj) {
  15. //执行复制
  16. let btn = $(obj);
  17. let pre = btn.parent();
  18. //为了实现复制功能。新增一个临时的textarea节点。使用他来复制内容
  19. let temp = $("<textarea></textarea>");
  20. //避免复制内容时把按钮文字也复制进去。先临时置空
  21. btn.text("");
  22. temp.text(pre.text());
  23. temp.appendTo(pre);
  24. temp.select();
  25. document.execCommand("Copy");
  26. temp.remove();
  27. //修改按钮名
  28. btn.text("复制成功");
  29. //一定时间后吧按钮名改回来
  30. setTimeout(()=> {
  31. btn.text("复制代码");
  32. },1500);
  33. }

这里在gitee上做了一个简单的demo。demo示例:

在线测试:http://demo.jb51.net/js/2021/code_copy/

到此这篇关于为网站代码块pre标签增加一个复制代码按钮代码的文章就介绍到这了,

更多相关文章

  1. Android的Activity跳转动画各种效果整理
  2. 使用Scala编写Android应用程序
  3. Android框架模式(1)-MVP入门
  4. Android(安卓)HAL实例学习-Jollen的mokoid工程编译篇
  5. 【Android】实现全屏、无标题栏效果
  6. 进击的Android注入术《五》
  7. Android学习之五:android一些基本控件
  8. Yii 框架使用Gii生成代码操作示例
  9. 模态框学习与实践

随机推荐

  1. python3如何打印进度条
  2. 基于fastai的分类网络
  3. 关于Python的编码注释# -*- coding:utf-8
  4. Python列表以及列表的处理方法
  5. AttributeError:“MatrixFactorizationMo
  6. 小白学Python---面向对象02
  7. Spark学习,pyspark执行后默认启动Ipython
  8. 通过分隔符计数和位置从数据框中提取特定
  9. 安装python2.6.6到ubuntu12.04
  10. Java程序不像python程序那样工作,我不知道