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

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

需求

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

相关推荐
视觉CG3 分钟前
【Viewer.js】vue3封装图片查看器
开发语言·javascript·vue.js
java1234_小锋15 分钟前
一周学会Flask3 Python Web开发-redirect重定向
前端·python·flask·flask3
琑9533 分钟前
nextjs项目搭建——头部导航
开发语言·前端·javascript
light多学一点44 分钟前
视频的分片上传
前端
Gazer_S1 小时前
【Windows系统node_modules删除失败(EPERM)问题解析与应对方案】
前端·javascript·windows
bigyoung1 小时前
基于 React 的列表实现方案,包含创建和编辑状态,使用 Modal 弹框和表单的最佳实践
前端
沙子迷了蜗牛眼1 小时前
antv G6绘制流程图
开发语言·javascript·ecmascript
乌木前端2 小时前
包管理工具lock文件的作用
前端·javascript
司玄2 小时前
3dtiles平移旋转原理及可视化工具实现
前端
m0_748236582 小时前
本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面
前端·tcp/ip·flask