前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS 实现复制粘贴功能

JS 实现复制粘贴功能

作者头像
White feathe
发布于 2021-12-08 07:24:56
发布于 2021-12-08 07:24:56
4.9K00
代码可运行
举报
运行总次数:0
代码可运行

JS 实现复制粘贴功能

目前没有做过多的测试,只是测试了几个手机,介绍:

支持情况

(1)移动端:

  1. chrome(版本 58.0.3029.96 (64-bit))、
  2. 猎豹(V6.0.114.14559)、
  3. QQ浏览器(Chromium53.022785.104 \ IE11.0.9600.18665)、
  4. 火狐(版本 53.02)

(2)App端

  1. 苹果6(版本:10.3.1)、
  2. 华为 (版本:6.0.1) 、
  3. 锤子 YQ601(版本:5.1.1)、
  4. 红米 Redmi Note 2(版本:5.0.2)
  5. android 4.2三星(WebView、QQ浏览器可以实现)

不支持

  1. android 4.2三星 UC浏览器
  2. LenovoA5800-D (版本:4.4.4,内核版本:3.10.48)

使用方式

接下来,介绍他的使用方式,前提条件,下载clipboard.min.js插件,下载地址:在这里

两种使用方式:

方式1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<body>
    <p>通过text参数来进行复制操作</p>
    <button class="btn">复制</button>

</body>
<script src="js/version/clipboard.min.js"></script>
<script>
    var clipboard = new Clipboard('.btn', {
        text: function() {
            return '这里是text参数返回的内容 - Hello yubai8';
        }
    });

    clipboard.on('success', function(e) {
        alert("文字已复制到剪贴板中");
        console.log(e);
    });

    clipboard.on('error', function(e) {
        alert("异常错误: " + JSON.stringify(e.message));
        console.log(e);
    });
</script>

方式2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    </head>

    <body>
        <div>欢迎光临 yubai9</div>
        <button class="btn" data-clipboard-action="copy" data-clipboard-target="div">Copy</button>

        <script src="js/version/clipboard.min.js"></script>

        <script>
            var clipboard = new Clipboard('.btn');


            clipboard.on('success', function(e) {
                alert("文字已复制到剪贴板中");
                console.log(e);
            });

            clipboard.on('error', function(e) {
                alert("异常错误: " + JSON.stringify(e));
                console.log(e);
            });
        </script>
    </body>

</html>

> >


PS:其实, clipboard.min.js只是做了下封装兼容,主要==核心代码==还是这个,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.ExecCommand("copy")

==浏览器支持返回 true,不支持或者没启用返回 false==


!!!==下面为我简单封装功能:==!!!

看情况来定是否采用,体积小,我认为我的功能够用就可以了!

下面是关键JS,压缩完2K,如果不需要做amd/cmd 去掉没用的JS只有1K,是不是完美

我的index.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(function(f) {
    if(typeof exports === "object" && typeof module !== "undefined") {
        module.exports = f()
    } else if(typeof define === "function" && define.amd) {
        define([], f)
    } else {
        var g;
        if(typeof window !== "undefined") {
            g = window
        } else if(typeof global !== "undefined") {
            g = global
        } else if(typeof self !== "undefined") {
            g = self
        } else {
            g = this
        }
        g.Clipboard = f()
    }
})(function() {
    var copy = {};
    copy.coptText = function(copybtn, cb) {
        copybtn = event || document.querySelector(copybtn)
        copybtn.addEventListener('click', function() { var copyTextarea = document.querySelector(copybtn.getAttribute("data-copy")); //要拷贝的文本 (copyTextarea.nodeName === 'INPUT' || copyTextarea.nodeName === 'TEXTAREA') ? copyTextarea.select(): copy.selectText(copyTextarea); copyTextarea.focus() try { var successful = document.execCommand('copy'); cb(successful); } catch(err) { console.log('哎呀,无法复制'); cb(false); } });
    }

    copy.selectText = function(copyTextarea) {  
        if(copyTextarea.hasAttribute('contenteditable')) {
            copyTextarea.focus();
        }
        if(document.selection) {    
            var range = document.body.createTextRange(); 
            range.moveToElementText(copyTextarea); 
            range.select(); 
        } else if(window.getSelection) {    
            var selection = window.getSelection();
            var range = document.createRange();

            range.selectNodeContents(copyTextarea);
            selection.removeAllRanges();
            selection.addRange(range);

            selectedText = selection.toString();
        }
    }
    this.copy = copy;
})

使用介绍:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    </head>

    <body>
        <p align="center">复制操作</p>
        <p>
            <div class="js-copyText">你好,我是文本125</div>
        </p>

        <p>
            <button class="js-textareacopybtn" data-copy=".js-copyText">文本复制</button>
            <!--

                data-copy表示你要拷贝的class或者是ID
                例如:
                data-copy=".js-copyText" 或者 
                data-copy="#js-copyText"

            -->
        </p>
        <p>
            <textarea rows="5"></textarea>
        </p>
        <script src="js/index.js"></script>
        <script type="text/javascript">
            /**
             * 复制粘贴功能
             * 2017-05-25
             * 参数一:表示复制功能按钮btn 可为id,可为class
             * 参数二:表示回调
             * yb
             */
            copy.coptText(".js-textareacopybtn", function(flag) {

                /**
                 * flag 为true的时候,表示赋值成功,false表示赋值失败,自行处理
                 */
                return flag ? alert("文字已复制到剪贴板中") : alert("请长按选中复制")
            });

        </script>
    </body>

</html>

注:

对了,如果想实现低版本浏览器的复制,类似于这种情况:

可以清晰的看到,这个功能是我点击按钮(文本复制)之后,出现的复制提示框,并不是我手动直接选中的,

input 输入框可以达到这个效果,但是有个问题是,你使用了input之后如果你打算 disabled="disabled" 或者 readonly="readonly"这样的话,那么就达不到你想要的效果了!


最后,document.ExecCommand的使用介绍:(最后有官网链接)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.execCommand("2D-Position","false","true");
下面列出的是指令参数及意义

2D-Position 允许通过拖曳移动绝对定位的对象。
AbsolutePosition 设定元素的 position 属性为“absolute”(绝对)。
BackColor 设置或获取当前选中区的背景颜色。
BlockDirLTR 目前尚未支持。
BlockDirRTL 目前尚未支持。
Bold 切换当前选中区的粗体显示与否。
BrowseMode 目前尚未支持。
Copy 将当前选中区复制到剪贴板。
CreateBookmark 创建一个书签锚或获取当前选中区或插入点的书签锚的名称。
CreateLink 在当前选中区上插入超级链接,或显示一个对话框允许用户指定要为当前选中区插入的超级链接的 URL。
Cut 将当前选中区复制到剪贴板并删除之。
Delete 删除当前选中区。
DirLTR 目前尚未支持。
DirRTL 目前尚未支持。
EditMode 目前尚未支持。
FontName 设置或获取当前选中区的字体。
FontSize 设置或获取当前选中区的字体大小。
ForeColor 设置或获取当前选中区的前景(文本)颜色。
FormatBlock 设置当前块格式化标签。
Indent 增加选中文本的缩进。
InlineDirLTR 目前尚未支持。
InlineDirRTL 目前尚未支持。
InsertButton 用按钮控件覆盖当前选中区。
InsertFieldset 用方框覆盖当前选中区。
InsertHorizontalRule 用水平线覆盖当前选中区。
InsertIFrame 用内嵌框架覆盖当前选中区。
InsertImage 用图像覆盖当前选中区。
InsertInputButton 用按钮控件覆盖当前选中区。
InsertInputCheckbox 用复选框控件覆盖当前选中区。
InsertInputFileUpload 用文件上载控件覆盖当前选中区。
InsertInputHidden 插入隐藏控件覆盖当前选中区。
InsertInputImage 用图像控件覆盖当前选中区。
InsertInputPassword 用密码控件覆盖当前选中区。
InsertInputRadio 用单选钮控件覆盖当前选中区。
InsertInputReset 用重置控件覆盖当前选中区。
InsertInputSubmit 用提交控件覆盖当前选中区。
InsertInputText 用文本控件覆盖当前选中区。
InsertMarquee 用空字幕覆盖当前选中区。
InsertOrderedList 切换当前选中区是编号列表还是常规格式化块。
InsertParagraph 用换行覆盖当前选中区。
InsertSelectDropdown 用下拉框控件覆盖当前选中区。
InsertSelectListbox 用列表框控件覆盖当前选中区。
InsertTextArea 用多行文本输入控件覆盖当前选中区。
InsertUnorderedList 切换当前选中区是项目符号列表还是常规格式化块。
Italic 切换当前选中区斜体显示与否。
JustifyCenter 将当前选中区在所在格式化块置中。
JustifyFull 目前尚未支持。
JustifyLeft 将当前选中区所在格式化块左对齐。
JustifyNone 目前尚未支持。
JustifyRight 将当前选中区所在格式化块右对齐。
LiveResize 迫使 MSHTML 编辑器在缩放或移动过程中持续更新元素外观,而不是只在移动或缩放完成后更新。
MultipleSelection 允许当用户按住 Shift 或 Ctrl 键时一次选中多于一个站点可选元素。
Open 目前尚未支持。
Outdent 减少选中区所在格式化块的缩进。
OverWrite 切换文本状态的插入和覆盖。
Paste 用剪贴板内容覆盖当前选中区。
PlayImage 目前尚未支持。
Print 打开打印对话框以便用户可以打印当前页。
Redo 目前尚未支持。
Refresh 刷新当前文档。
RemoveFormat 从当前选中区中删除格式化标签。
RemoveParaFormat 目前尚未支持。
SaveAs 将当前 Web 页面保存为文件。
SelectAll 选中整个文档。
SizeToControl 目前尚未支持。
SizeToControlHeight 目前尚未支持。
SizeToControlWidth 目前尚未支持。
Stop 目前尚未支持。
StopImage 目前尚未支持。
StrikeThrough 目前尚未支持。
Subscript 目前尚未支持。
Superscript 目前尚未支持。
UnBookmark 从当前选中区中删除全部书签。
Underline 切换当前选中区的下划线显示与否。
Undo 目前尚未支持。
Unlink 从当前选中区中删除全部超级链接。
Unselect 清除当前选中区的选中状态。

详见官方文档:官方

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/05/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
复制粘贴插件——clipboard.js的使用
将文本复制到剪贴板应该不难。它不应该需要几十个步骤来配置或加载数百 KB。但最重要的是,它不应该依赖于 Flash 或任何臃肿的框架。 这就是 clipboard.js 存在的原因。
SingYi
2022/07/13
3.2K0
JavaScript中的execCommand
execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令。处理Html数据时常用 如下格式:document.execCommand(sCommand[,交互方式, 动态参数]) ,其中:sCommand为指令参数(如下例中的”2D-Position”),交互方式参数如果是true的话将显示对话框,如果为false的话,则不显示对话框(下例中的”false”即表示不显示对话框),动态参数一 般为一可用值或属性值(如下例中的”true”)。 document.execCommand("2D-
SpiritLing
2018/04/16
1.4K0
原生 JS 实现复制功能
<input id="target" type="text" > <button onclick="onCopyClick()">复制</button> <script type="text/javascript"> function copyToClipboard (text) { if (!document.createRange || !window.getSelection || !document.execCommand) { return false; }
lonelydawn
2021/10/19
7.9K0
一个被 157317 个项目引用的 JS 开源库
Clipboard.js 实现了原生 JavaScript (无 Flash)的浏览器内容复制到系统剪贴板的功能。
程序员老鱼
2022/12/02
7550
JS 实现点击按钮复制一段文字
JS 要获取某段文字最好是触发,onselect 事件,这个就能获得选中的内容。
酒馆丁老师
2020/09/08
11.3K0
JS 实现点击按钮复制一段文字
利用clipboard.js复制粘贴JS插件实现页面特定文本按钮复制
我们在设计网站的时候,有些效果需要不断的提高用户体验。比如我们在页面中的微信号、电话号码、优惠码等信息,最好不要用户直接复制。如果能直接点击按钮直接复制效果还是比较好体验的。这里我们可以使用clipboard.js复制粘贴JS插件实现。
老蒋
2021/12/27
7.1K0
Clipboard.js实现复制[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154538.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
1.8K0
JavaScript 中的复制粘贴操作
在日常业务开发,比如复制后增加版权信息,点击复制,等场景中需要进行复制粘贴的操作,以下是几种实现方案。
FEWY
2021/09/08
2.4K0
clipboard.js:最轻便的复制页面内容到剪切板的JS
最近在做一个项目的时候,需要实现一个功能就是点击一个按钮,将内容复制到剪贴板。传统的复制页面内容到剪切板主要方法是通过 Flash,但是在现代浏览器中,Flash 逐渐没落,慢慢被淘汰,搜索了一圈,发现 clipboard.js 是目前实现该功能最轻便的工具。
Denis
2023/04/14
2.7K0
前端H5怎么简单的实现复制text内容的操作
首先说明一下写这个的原因,现在不管是什么类型的网站,不管你访问的是什么类型的网址,进去以后你想要保存一些东西很简单,直接右键选择复制就可以了,这个是Windows自带的功能(快捷键 ctrl+c/ctrl+v,不做赘述),那么windows提供了那么好的功能,我们为什么还要做一个复制的操作呢?很简单有的时候访问网站的人不会这个操作,但是认识字,你可以给他提供一个复制的按钮,然后复制text输入的内容就可以了,这个他是会操作的,ok废话不说,简单的说明一些怎么实现。
何处锦绣不灰堆
2020/05/29
1.2K0
前端H5怎么简单的实现复制text内容的操作
Hexo优化 --- 添加复制功能
前言 Hexo Next 主题自带的代码块功能,没有复制功能,很不方便。 经过一番查找后,在主题的 Issues 中找到了解决方案,这里记录下。 下载 需要下载 clipboard.js 主页 Github 提供下载 clipboard.min.js 将下载的文件存到如下目录:(相对目录为工程目录,没有目录则创建) 1 .\themes\next\source\lib\zclip\clipboard.min.js 导入 新建文件 custom.js ,目录如下:(相对目录为工程目录) 1 \th
一份执着✘
2018/06/04
3.5K2
js复制插件clipboard全平台兼容
前面转载过一个篇简单《通过js实现复制到剪贴板功能》,但是兼容性不是很理想,有幸今天找到一个全平台通用的js,适用于Chrome 42+、Firefox 41+ 、Edge 12+、IE 9+、Opera 29+、Opera 29+等平台 手机上也测试过可以使用的 使用教程: 先引用js <script src="clipboard.min.js"></script> 下面是html <a id="copyValue" data-clipboard-target='#copyV
Youngxj
2018/06/06
3.2K0
学习js在线html(富文本)编辑器
你要的是所见即所得HTML编辑器,简单来说需要几个基本步骤: 1,需要一个可以编辑同时又可显效果的编辑框。textarea不行,它只能用来输入纯文本,不能显示颜色、斜体之类的文字样式,就像记事本。 你可以使用iframe来实现,修改iframe的designMode属性使其可以被编辑。 <iframe id="myEditer" width="100%" height="150px"></iframe> <script>myEditer.document.designMode = 'on';</scri
deepcc
2018/05/16
20.1K0
JavaScript操作剪贴板
在网页中一般是不允许访问剪贴板内容的,因为这样存在着很大的安全隐患。在IE和FireFox中剪贴板的访问是可控的,但是在Opera、Chrome、Safari浏览器中是不允许访问的,这样就产生了浏览器兼容的问题。
恋喵大鲤鱼
2018/08/03
3.1K0
Clipboard.js实现复制文本到剪贴板功能[通俗易懂]
Clipboard.js是一个轻量级的实现复制文本到剪贴板功能的JavaScript插件,该插件可以将输入框,文本域,DOM节点元素中的文本内容复制到剪贴板中。
全栈程序员站长
2022/09/15
2.4K0
开源一款剪贴板跨设备共享工具
昨天遇到了一个很棘手的问题:我的手机剪贴板需要同步到另外的两台设备上。遗憾的是手机上并没有安装相同的通讯软件。用网上免费的剪贴板共享工具吧,方便是方便,但是觉得还是不安全,关键是不能实现特定的需求。我很享受DIY的过程,于是思索一下,我觉得我可以自己做出来,还能做到局域网下的剪贴板跨设备共享,毕竟我也曾有过成功的案例:开源一个局域网文件共享工具。于是说干就干。
shigen
2024/03/31
3110
图形编辑器开发:实现图形的复制粘贴
如果只支持粘贴到当前编辑器下,方案很简单:只需要监听 Ctrl + C 键盘事件深拷贝一份选中图形对象,然后再监听 Ctrl + V 事件,将拷贝出来的对象添加到图形树的末尾。
前端西瓜哥
2023/08/18
3780
图形编辑器开发:实现图形的复制粘贴
网页实现把文本复制到粘贴板
思路整理 有一个按钮可以触发以下逻辑: 将生成的文本自动复制到剪切板上 结果要有友好提示 复制成功后可以粘贴到任何地方 一开始我以为有通用的接口,一番调研之后发现有以下几种东东: document.execCommand("copy")这个用于在要复制的文本处于被选中状态时使用 window.clipboardData.setData("Text", clipBoardContent)为挂载在window上的API 据说兼容性不好 结合ZeroClipboard.js这个插件实现兼容性比较好的复制粘贴,通过
卡少
2018/05/16
2.3K0
js实现网站无感复制,用户访问网站自动复制内容到剪贴板。
有时候,我们希望用户访问我们网站就自动复制指定内容到用户剪贴板。 比如支付宝赞赏码什么的..... 但是这样的不好的地方就是会对用户的体验有影响,每次用户访问就会复制一次。
吃猫的鱼Code
2023/02/02
2.3K0
在“CSND”和“掘金”复制文章内容的时候,会额外出现一段版权信息。这是如何做到的?
不知道大家平时使用“CSDN”和“掘金”的频率高不高。如果你经常使用的话,你就会遇到这样一个问题:
程序员牛肉
2024/09/26
2780
在“CSND”和“掘金”复制文章内容的时候,会额外出现一段版权信息。这是如何做到的?
推荐阅读
相关推荐
复制粘贴插件——clipboard.js的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验