欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

用JavaScript原生功能复制图片和文字

最编程 2024-02-15 08:45:37
...

原生JS实现复制

这种方式主要使用到了几个比较重要的知识点,分别是range、selection、execCommand,主要实现方式是通过range来选中我们需要复制内容的dom元素,然后通过selection来获取选中的范围,最后通过execCommand(‘copy’)来实现复制

Range

介绍

官方解释是:Range 对象表示文档的连续范围区域,如用户在浏览器窗口中用鼠标拖动选中的区域。
其实就是我们用鼠标按住拖动选中的范围,这个范围一般是一个开始节点和一个结束节点之间的范围,这里不详细讲,有需要可以看官方文档Rang对象详解。

使用

创建: let range = document.createRange()
选中某个节点: range.selectNode(node)
选中某个节点的内容: range.selectNodeContents(node)

getSelection

介绍

官方解释是:getSelection()方法可以返回一个Selection对象,用于表示用户选择的文本范围或插入符的当前位置。详情看getSelecion对象详解。#

使用

创建: let selection = window.getSelection()
获取选中内容: let result = selection.toString()
添加一个选中范围: selection.addRange(range)
清空选中: selection.removeAllRange()

execCommand

文档对象暴露 execCommand 方法,该方法允许运行命令来操纵可编辑区域的内容,大多数命令影响文档的选择(粗体,斜体等),而其他命令插入新元素(添加链接)或影响整行(缩进)。当使用 contentEditable 时,调用 execCommand() 将影响当前活动的可编辑元素。
这里仅使用document.execCommand(‘copy’)来实现复制

copy代码

function copyNode(node) {
  //console.log(node)
  let selection = window.getSelection()
  let range = document.createRange()
  range.selectNode(node);
  //range.deleteContents()
  selection.addRange(range)
  //console.log(range)
  document.execCommand('copy')
  selection.removeAllRanges()
}

问题:如果粘贴板已有复制的内容,在复制不能覆盖,仍然是上次覆盖的内容
解决:复制前先调用window.getSelection().removeAllRanges()清空粘贴板