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

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

需求

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

相关推荐
CrissChan1 小时前
Pycharm 函数注释
java·前端·pycharm
小小小小宇1 小时前
Vue.nextTick()笔记
前端
小约翰仓鼠3 小时前
vue3子组件获取并修改父组件的值
前端·javascript·vue.js
Lin Hsüeh-ch'in3 小时前
Vue 学习路线图(从零到实战)
前端·vue.js·学习
烛阴3 小时前
bignumber.js深度解析:驾驭任意精度计算的终极武器
前端·javascript·后端
计蒙不吃鱼3 小时前
一篇文章实现Android图片拼接并保存至相册
android·java·前端
全职计算机毕业设计4 小时前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端
你的人类朋友4 小时前
✍️Node.js CMS框架概述:Directus与Strapi详解
javascript·后端·node.js
啊~哈4 小时前
vue3+elementplus表格表头加图标及文字提示
前端·javascript·vue.js