首页
关于
留言
统计
更多
友链
Search
1
NodeJs服务端POST请求如何拿到请求body的内容
678 阅读
2
教你如何获取浏览器窗口大小
237 阅读
3
手把手教你ElasticSearch本地快速安装部署
174 阅读
4
clarity-js源码分析系列(三)之元素变化处理
174 阅读
5
你必须了解的Flutter原理
125 阅读
技术知识
网络
数据分析
算法
实用工具
前端技术
JS技术
CSS技术
Web技术
移动端
服务端
经验思考
实习
工作
生活
登录
/
注册
Search
标签搜索
js技巧
js原理
随笔
面经
css技巧
源码分析
前端监控
录制回放
http
函数
leetcode
盒模型
elasticsearch
codemirror
编辑器
markdown
nodejs
职业规划
二叉树
tcp
西蒙
累计撰写
52
篇文章
累计收到
0
条评论
首页
栏目
技术知识
网络
数据分析
算法
实用工具
前端技术
JS技术
CSS技术
Web技术
移动端
服务端
经验思考
实习
工作
生活
页面
关于
留言
统计
友链
搜索到
7
篇与
js技巧
的结果
2023-03-28
关于浏览器复制粘贴你不可不知的事
浏览器中的复制粘贴功能是我们经常使用的一种操作,它可以让我们快速地在不同的地方分享或转移文本、图片等内容。但是,你知道吗,JavaScript 也可以对浏览器的复制粘贴行为进行监听和控制,实现一些有趣或有用的功能。本文将从以下几个方面介绍:JavaScript 如何监听浏览器的复制粘贴行为如何点击按钮一键复制如何禁止用户复制如何给用户复制的内容加上文字水印JavaScript 如何监听浏览器的复制粘贴行为要监听浏览器的复制粘贴行为,我们可以使用以下几个事件:copy:当用户执行复制操作时触发,比如使用鼠标右键菜单或者按下 Ctrl+C 键cut:当用户执行剪切操作时触发,比如使用鼠标右键菜单或者按下 Ctrl+X 键paste:当用户执行粘贴操作时触发,比如使用鼠标右键菜单或者按下 Ctrl+V 键这些事件都有一个before事件对应,比如 beforecopy、beforecut、beforepaste,它们在相应的操作之前触发,可以用来阻止默认行为或者做一些预处理。这些事件都有一个event对象作为参数,其中有一个重要的属性叫 clipboardData,它是一个Clipboard对象,用于访问和修改剪贴板中的数据。Clipboard对象有两个方法:getData(type):用于获取指定类型的数据,比如 “text” 或 “image”setData(type, data):用于设置指定类型的数据,比如 “text” 或 “image”例如,我们可以这样监听全局的复制事件,并打印出复制的内容:document.body.oncopy = function(e) { // 获取 clipboardData 对象 let clipboardData = e.clipboardData || window.clipboardData; // 获取复制的文本 let text = clipboardData.getData("text"); // 打印出来 console.log(text); };如何点击按钮一键复制有时候,我们希望用户可以点击一个按钮就能把某些内容复制到剪贴板中,方便他们分享或使用。这时候,我们可以利用document.execCommand(command)方法来执行一些命令来操作可编辑内容区域的元素。其中有一个命令叫 “copy”,它可以把当前选中的内容复制到剪贴板中。例如,我们可以这样实现一个一键复制按钮:<body> <p id="text">这是要复制的内容</p> <button id="btn">点击复制</button> </body> <script type="text/javascript"> // 获取元素 let text = document.getElementById("text"); let btn = document.getElementById("btn"); // 给按钮添加点击事件 btn.onclick = function() { // 选中要复制的文本 window.getSelection().selectAllChildren(text); // 执行 copy 命令 document.execCommand("copy"); // 提示用户已经复制成功 alert("已经复制到剪贴板"); }; </script>如何禁止用户复制有时候,我们不希望用户可以复制网页上的内容,比如一些版权或隐私信息。这时候,我们可以利用beforecopy事件来阻止用户的复制行为。例如,我们可以这样实现一个禁止复制的段落:<body> <p id="text">这是不能复制的内容</p> </body> <script type="text/javascript"> // 获取元素 let text = document.getElementById("text"); // 给元素添加 beforecopy 事件 text.onbeforecopy = function(e) { // 阻止默认行为 e.preventDefault(); // 提示用户不能复制 alert("这是不能复制的内容"); }; </script>如何给用户复制的内容加上文字水印有时候,我们希望用户可以复制网页上的内容,但是又想给复制的内容加上一些文字水印,比如网站的名称或者版权声明。这时候,我们可以利用copy事件来修改剪贴板中的数据。例如,我们可以这样实现一个给复制的内容加上文字水印的段落:<body> <p id="text">这是可以复制的内容</p> </body> <script type="text/javascript"> // 获取元素 let text = document.getElementById("text"); // 给元素添加 copy 事件 text.oncopy = function(e) { // 获取 clipboardData 对象 let clipboardData = e.clipboardData || window.clipboardData; // 获取复制的文本 let text = clipboardData.getData("text"); // 给文本加上水印 text += "\n\n本文来自:https://www.example.com"; // 设置剪贴板中的数据 clipboardData.setData("text", text); // 提示用户已经复制成功 alert("已经复制到剪贴板"); }; </script>Navigator.clipboardnavigator.clipboard 是一个只读属性,它返回一个 Clipboard 对象,可以用来读写剪贴板的内容。它是 Clipboard API 的一部分,可以用来实现剪切、复制、粘贴的功能。要使用 navigator.clipboard 的方法,需要先获取用户的许可,可以通过 Permissions API来请求 “clipboard-read” 或 “clipboard-write” 的权限。navigator.clipboard 有以下几个方法:read():从剪贴板读取数据,返回一个 Promise 对象,解析为一个 DataTransfer 对象,包含多种类型的数据。readText():从剪贴板读取文本,返回一个 Promise 对象,解析为一个字符串。write(data):写入任意数据到剪贴板,接受一个 DataTransfer 对象作为参数,返回一个 Promise 对象。writeText(text):写入文本到剪贴板,接受一个字符串作为参数,返回一个 Promise 对象。例如,我们可以这样使用 navigator.clipboard 来复制和粘贴文本:// 复制文本到剪贴板 navigator.clipboard.writeText("Hello, world!") .then(() => { console.log("Text copied"); }) .catch((error) => { console.error("Copy failed", error); }); // 从剪贴板读取文本 navigator.clipboard.readText() .then((text) => { console.log("Text pasted", text); }) .catch((error) => { console.error("Paste failed", error); });navigator.clipboard 和 document.execCommand 都是可以用来操作剪贴板的 API,但是它们有以下几点不同:navigator.clipboard 是异步的,返回 Promise 对象,而 document.execCommand 是同步的,返回布尔值。navigator.clipboard 可以处理多种类型的数据,而 document.execCommand 只能处理文本。navigator.clipboard 需要用户的许可,而 document.execCommand 不需要。navigator.clipboard 可以在任何时候调用,而 document.execCommand 只能在用户交互的上下文中调用。navigator.clipboard 的优点是它更安全、更灵活、更现代,而且不会阻塞主线程。它的缺点是它需要用户的许可,而且浏览器的兼容性不是很好。document.execCommand 的优点是它不需要用户的许可,而且浏览器的兼容性比较好。它的缺点是它只能处理文本,而且可能在未来被废弃。不过目前大部分还是用document.execCommand来实现复制粘贴操作。通过以上内容,相信你对浏览器复制粘贴相关的操作可以更加得心应手了,如果还有更多相关的知识或者问题,欢迎留言讨论。
2023年03月28日
9 阅读
0 评论
1 点赞
2019-01-23
如何在浏览器实现文字打字机输入效果
我们看到有些网站的文字会有类似于输入的效果,就好像自动打字一样,虽然这个效果用的地方可能不多,但如果用的好的话可能会有奇效,比如在博客、演讲展示等方面应用。那么,怎么实现呢?
2019年01月23日
74 阅读
0 评论
0 点赞
2019-01-12
页面不同内容之间的跳转如何实现?
我们常常会碰到这样的需求:点击某个标题、某段话,跳转到页面对应的位置,并且浏览器不会刷新,相当于在页面进行内部导航,这在浏览文章、或者是内容比较多的长屏单页应用上有着迫切的需求。那么,如何实现这个简单的功能呢?
2019年01月12日
65 阅读
0 评论
0 点赞
2018-12-04
点击按钮一键粘贴所选内容到剪贴板
我们经常可以看到这样的功能,点击某个按钮可以自动复制想要的内容到剪贴板。比如说某个图片、视频的地址,某个输入的内容,我们有的时候懒得去用键盘鼠标选中某个区域,希望只用点击一下,就能复制想要的内容。
2018年12月04日
107 阅读
0 评论
0 点赞
2017-08-27
教你用原生JS写轮播图
我们经常可以在网页上看到轮播图的效果,这是一个很常见的应用,但是,要想比较完美地实现这个功能,还是需要花点时间的。
2017年08月27日
71 阅读
0 评论
0 点赞
2017-08-22
原生JS实现回到顶部的效果
我们在浏览网页时通常会看到有返回顶部的按钮。当我们移动鼠标滑轮或者方向键时使页面开始滚动,如果我们滚动了一会想回到页面顶部时,这个时候就需要回到顶部按钮,那这个按钮是怎么实现的呢?
2017年08月22日
78 阅读
0 评论
0 点赞
2017-08-08
教你如何获取浏览器窗口大小
我们经常会遇到这样的需求:获取当前浏览器窗口大小,然后根据其大小来对页面进行样式设计。那么怎么去获取呢?
2017年08月08日
237 阅读
0 评论
0 点赞