🐟🐟🐟摸鱼时间到!两分钟实现掘金文字版权效果

这是一篇新手向的文章,如果你已经会了可以鼠标右键关闭本文

需求

我们在掘金冲浪时,经常会用到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即可实现

简化为几个步骤:

  1. 监控用户复制事件
  2. 复制触发时获取选中的文本
  3. 给文本加上版本文字

分别对应以下几个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>

效果如下

具体代码参考stackblitz.com/edit/js-htc...

相关推荐
Mintopia2 分钟前
时间源不统一 + 网络延迟 + 客户端时钟偏移
前端·架构
不甜情歌4 分钟前
拆解JS原型核心:显式原型(prototype)+ 隐式原型(__proto__)+原型链,解锁JS继承的关键密码
前端·javascript
香草泡芙5 分钟前
解锁AI Agent潜能:基于Langchain组件库的落地指南(2)
前端·javascript·人工智能
wuhen_n5 分钟前
函数式组件 vs 有状态组件:何时使用更高效?
前端·javascript·vue.js
小码哥_常8 分钟前
Kotlin开发秘籍:解锁Android编程新姿势
前端
ETA812 分钟前
页面卡顿的元凶:可能是你没搞懂事件循环(面试可用)
前端·浏览器
毛骗导演13 分钟前
OpenClaw 技能系统源码解析:一个 Markdown 文件是怎么变成 AI 的能力的
前端·架构
kyriewen13 分钟前
当 JavaScript 试图做加法:一场混乱的“相亲”大会
前端·javascript·html
cxxcode15 分钟前
Node.js 进程间通信(IPC)方式总结
前端