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

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

需求

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

相关推荐
不可能的是8 分钟前
Claude Code 子 Agent 机制全解:怎么跑起来、怎么被管理、怎么互不干扰
javascript
jeffwang10 分钟前
我做了个让 AI 看屏幕跑测试的工具,因为 Playwright 测不了我的 Flutter Web
前端
HSunR40 分钟前
dify 搭建ai作业批改流
开发语言·前端·javascript
代码不加糖1 小时前
2026 跨境电商独立站实战:从 0 到 1 搭建高转化 SaaS 商城(附源码)
开发语言·前端·javascript
亲亲小宝宝鸭1 小时前
拖一拖控件,拖出个问卷(低代码平台)
前端·低代码
江南十四行1 小时前
ReAct Agent 基本理论与项目实战(一)
前端·react.js·前端框架
We་ct2 小时前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·leetcode·typescript·动态规划
小呆呆6662 小时前
Codex 穷鬼大救星
前端·人工智能·后端
当时只道寻常3 小时前
Vue3 + IntersectionObserver 实现高性能图片懒加载
前端
用户617517157013 小时前
关于普通函数和箭头函数的this
javascript