Web开发:一键复制到剪切板功能实现思路

        在很多网页页面中我们都使用到过一键复制内容到剪切板的小功能,那么,具体如何实现呢?下面来讲述基于原生JavaScript API的两种实现思路。

同步方式:document.execCommand

   这种方式:

优点:是最传统的方法,而且兼容性很好, 各大浏览器都支持,使用起来也简洁方便。

缺点:只能将选中的内容复制到剪贴板,无法向剪贴板任意写入内容;另外,这种操作是同步的,粘贴大量数据,页面会出现卡顿,导致页面无法及时响应等情况。

      基本语法为:

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

          其中:

返回值:一个 Boolean ,如果是 false 则表示操作不被支持或未被启用

参数:

       aCommandName:要执行的命令名称,这里是复制,就对应copy;

       aShowDefaultUI:是否展示用户界面,一般为 false;

       aValueArgument:一些命令(例如 insertImage)需要额外的参数(insertImage 需要提供插入 image 的 url),默认为 null。

        示例代码,

        const getJSONData = () => {
            const content = document.querySelectorAll(".content>p")
            const result = Object.create(null);
            content.forEach(item => {
                result[item.querySelector("#label").innerHTML] = item.querySelector("#value").innerHTML
            })
            return result
        }


        const btnTrad = document.querySelector("#trad-copy");
        btnTrad.addEventListener("click", () => {
            //获取被复制的内容
            const copyData = getJSONData()
            //创建input辅助元素
            const input = document.createElement('input');
            document.body.append(input)
            input.value = JSON.stringify(copyData);
            //选中input元素
            input.select();
            //复制
            const flag = document.execCommand('copy',false,null)
            console.log('copy:', flag)
            //移除辅助元素
            input.remove()
        })

Tips:在 HTML元素中,select事件只能在表单<input type="text">和 <textarea>元素上触发。

异步方式:navigator.clipboard

        navigator.clipboard可以获取一个Clipboard剪切板对象,通过该对象,可以实现剪切、复制、粘贴的操作。

        Clipboard剪切板API如下,提供了read、write用于读写二进制数据;提供了readText、writeText用于读写文本数据。

        对于Clipboard剪切板API的可用性,官网介绍如下,

        要实现一键复制操作,我们暂时只关注writeText()方法即可,

         示例代码如下,

 /**
         * ClipBoard-异步操作方式
         * */
        document.querySelector("#clipboard-copy").addEventListener("click", async () => {
            //获取被复制的内容
            const copyData = getJSONData()
            //复制到剪切板
            if (navigator.clipboard) {
                navigator.clipboard.writeText(JSON.stringify(copyData)).then(() => {
                    console.log("复制成功")
                }, () => {
                    console.error("复制失败")
                })
            } else {
                throw new Error('当前浏览器不支持!');
            }
        })

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/137672.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

把字符串转换为整数函数atoi

今天我们来认识一个函数&#xff0c;叫atoi&#xff0c;我们开始研究它吧&#xff01; 1.认识atoi 1.函数功能&#xff1a;将字符串转换为整数 只能将整数字符串转换为整数&#xff0c;不能转换字符字符串 2.头文件&#xff1a;#include<stdlib.h> 3.使用格式&#xff1a…

文件上传 [ACTF2020 新生赛]Upload1

打开题目&#xff0c;发现是一道文件上传题目 随便上传个一句话木马上去 发现网站前端有白名单限制&#xff0c;只能上传含有jpg&#xff0c;png&#xff0c;gif的后缀文件 最开始我想到的做法是先上传htaccess文件&#xff0c;bp修改文件头&#xff0c;上传成功后然后再上传以…

数据结构与算法(二)动态规划(Java)

目录 一、简介1.1 什么是动态规划&#xff1f;1.2 动态规划的两种形式1&#xff09;自顶向下的备忘录法&#xff08;记忆化搜索法&#xff09;2&#xff09;自底向上的动态规划3&#xff09;两种方法对比 1.3 动态规划的 3 大步骤 二、小试牛刀&#xff1a;钢条切割2.1 题目描述…

Linux系统上64位ATT风格汇编语言计算乘方堆栈图分析(只有一层调用)

参考博文&#xff1a;《怎样深入理解堆和栈》 《关于寻址方式一篇就够了》 《堆栈、栈帧、函数调用过程》 《gdb 调试中-i frame命令之堆栈信息说明》 《【TARS】GDB 调试进阶「0x02」》 栈与栈帧的关系 一个程序在运行过程中&#xff0c;操作系统会在内存中分配多个区域给这…

设计模式-工厂方法

工厂方法是一种创建型设计模式&#xff0c;其在父类中提供一个创建对象的方法&#xff0c;允许子类决定实例化对象的类型。 问题 假设你开设了一个汽车工厂。创业初期工厂只能生产宝马这一款车&#xff0c;因此大部分代码都位于名为宝马的类中。 工厂效益非常好&#xff0c;为…

牛客刷题记录11.12 (10/6)

操作复杂度 map vector set deque 抽线类 C11 :两个新特性 &#xff1a; override, finnal override:子类必须覆写父类的虚函数&#xff0c;否则报错&#xff0c; finnal:类中函数使用后&#xff0c;子类不能重写该函数&#xff1b;若修饰类&#xff0c;该类不能被继承&#…

生成只需要4step,像lora一样使用LCM

SDXL in 4 steps with Latent Consistency LoRAs 在comfyui里实测LCM lora 原先需要20步一张图&#xff0c;现在20步&#xff0c;4张图。comfyui最新版新增了lcm采样器&#xff0c;支持lcm lora的工作流。 LCM lora模型下载&#xff1a; huggingface.co/latent-consistency/lcm…

BGP属性实验

一、实验拓扑 二、实验要求 按照图示配置IP地址以及在路由器上配置BGP&#xff0c;使其全网通 1、配置IP地址 2、配置AS 200内的OSPF [AR2]ospf 1 router-id 2.2.2.2 [AR2-ospf-1]a 0 [AR2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0 [AR2-ospf-1-area-0.0.0.0]network 1…

深入了解SpringMvc接收数据

目录 一、访问路径&#xff08;RequestMapping&#xff09; 1.1 访问路径注解作用域 1.2 路径精准&#xff08;模糊&#xff09;匹配 1.3 访问路径限制请求方式 1.4 进阶访问路径请求注解 1.5 与WebServlet的区别 二、接收请求数据 2.1 请求param参数 2.2 请求路径参数 2.3 请求…

【GEE】10、使用 Google 地球引擎创建图形用户界面【GUI开发】

1简介 在本模块中&#xff0c;我们将讨论以下概念&#xff1a; 用于生成图形用户界面的 GEE 对象。如何开发具有交互元素的面板。如何将地理处理元素连接到交互式元素。 2背景 在过去的十个单元中&#xff0c;我们展示了 Google Earth Engine 可以成为一种重要且高效的资源&a…

代码分析之-广东省公共资源交易平台

广东省公共资源交易平台 hex: function Xq() {return bg || (bg 1,function(e, t) {(function(n, u) {e.exports u()})(an, function() {var n n || function(u, o) {var r;if (typeof window < "u" && window.crypto && (r window.crypto)…

【差旅游记】启程-新疆哈密(1)

哈喽&#xff0c;大家好&#xff0c;我是雷工。 最近有个新疆罗布泊的项目要去现场&#xff0c;领导安排我过去&#xff0c;这也算第一次到新疆&#xff0c;记录下去新疆的过程。 01、天有不测风云 本来预定的是11月2号石家庄飞成都&#xff0c;成都转机到哈密&#xff0c;但…

数据结构----顺序栈的操作

1.顺序栈的存储结构 typedef int SElemType; typedef int Status; typedef struct{SElemType *top,*base;//定义栈顶和栈底指针int stacksize;//定义栈的容量 }SqStack; 2.初始化栈 Status InitStack(SqStack &S){//初始化一个空栈S.basenew SElemType[MAXSIZE];//为顺序…

【Java SE】类和对象(下)

接着上文 目录 6. 封装 6.1 封装的概念 6.2 访问限定符 6.3 封装扩展之包 6.3.1 包的概念 6.3.2 自定义包 6.3.3 导入包中的类 6.3.4 包的访问权限控制举例 6.3.5 常见的包 7. static成员 7.1 static修饰成员变量 ​编辑 ​编辑 7.2 static修饰成员方法 8. 代…

从0到0.01入门React | 008.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

CLIP:用文本作为监督信号训练可迁移的视觉模型

Radford A, Kim J W, Hallacy C, et al. Learning transferable visual models from natural language supervision[C]//International conference on machine learning. PMLR, 2021: 8748-8763. CLIP 是 OpenAI 在 2021 年初的工作&#xff0c;文章发表在 ICML-2021&#xff0…

Linux--gcc/g++

一、gcc/g是什么 gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Compiler&#xff09;&#xff0c;现在除了c语言&#xff0c;还支持C、java、Pascal等语言。gcc支持多种硬件平台 二、gc…

从0到0.01入门React | 001.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Codeforces Round 788 (Div. 2) E. Hemose on the Tree(树上构造)

题目 t(t<5e4)组样例&#xff0c;每次给定一个数p&#xff0c; 表示一棵节点数为的树&#xff0c; 以下n-1条边&#xff0c;读入树边 对于n个点和n-1条边&#xff0c;每个点需要赋权&#xff0c;每条边需要赋权&#xff0c; 权值需要恰好构成[1,2n-1]的排列 并且当你赋…

初阶JavaEE(17)Linux 基本使用和 web 程序部署

接上次博客&#xff1a;初阶JavaEE&#xff08;16&#xff09;博客系统&#xff08;Markdown编辑器介绍、博客系统功能、博客系统编写&#xff1a;博客列表页 、博客详情页、实现登录、实现强制登录、显示用户信息、退出登录、发布博客&#xff09;-CSDN博客 目录 Linux 基本…