这是一篇新手向的文章,如果你已经会了可以鼠标右键关闭本文
需求
我们在掘金冲浪时,经常会用到copy and paste(复制粘贴)功能
随便复制一篇掘金文章的内容,可以看到带上了版权相关内容,这是怎么实现的呢
javascript
//React 17
import React from "react"
import ReactDOM from "react-dom"
import App from "./App"
const root = document.getElementById("root")
ReactDOM.render(<App/>,root) // 卸载组件 ReactDOM.unmountComponentAtNode(root)
// React 18
import React from "react"
import ReactDOM from "react-dom/client"
import App from "./App"
const root = document.getElementById("root") ReactDOM.createRoot(root).render(<App/>) // 卸载组件 root.unmount()
作者:lyllovelemon
链接:https://juejin.cn/post/7182382408807743548
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
具体实现
其实非常简单,用原生Javascript即可实现
简化为几个步骤:
- 监控用户复制事件
- 复制触发时获取选中的文本
- 给文本加上版本文字
分别对应以下几个API:
- window oncopy
- window.onSelection
- clipboardData
oncopy
可以在事件绑定中触发
javascript
window.addEventListener('oncopy',function(){
console.log('已经复制了!')
})
onSelection
clipboardData
show me your code
xml
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
我是测试内容<br/>
TCP/IP是保证在不同的网络实现信息传输的协议族,TCP面向字节流的、可靠的传输协议,IP用于封包交换数据的协议。TCP/IP不单单指TCP和IP协议,还包括FTP,SMTP,UDP等<br/>
通过三次握手建立连接,四次挥手断开连接。
</div>
<script>
var content = document.getElementById('app');
content.oncopy = function (event) {
event.preventDefault(); // 阻止默认事件
const selection = document.getSelection(); // 获取光标选中的元素
let selectionContent = selection.toString() // 选中元素内容转为字符串
let result =
selectionContent +
'\n作者:lyllovelemon\n链接:https://juejin.cn/post/7182382408807743548\n来源:稀土掘金\n著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。'; // 字符串拼接版权文字
event.clipboardData.setData('text/plain',result) // 通过setData将处理过的文本加入剪切板
}
</script>
</body>
</html>
效果如下