在项目中使用到复制粘贴功能,虽然网上有很多大牛封装了很多的插件,但是还是想不去使用插件,就像自己来实现这个功能。

另一篇是禁止复制粘贴 前端er怎样操作剪切复制以及禁止复制+破解等


初步想法:
1. 获取到需要复制的内容,这里我可以将需要复制的内容放在input或者textarea的value中,然后使用input的select()方法来获取到值;
2. 获取到值了,那我下一步就是复制了,document.execCommand()方法可以操作很多功能,这里我可以使用他的copy复制选中的文字到粘贴板的功能;
3. 复制功能实现了,但是这个input或者textarea不是我页面布局中所需要的,那我可以将input或者textarea设置成透明的;
代码实现:
1. js: import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import './index.less'
class CopyClip extends PureComponent {
static propTypes = {
text: PropTypes.any, //文字内容
ID: PropTypes.string
};
static defaultProps = {
ID: 'copy-clip-textarea',
};
constructor(props) {
super(props);
this.state = {}
}
componentWillMount() {
const {text} = this.props;
this.setState({
text
})
}
componentWillReceiveProps(nextProps) {
const {text} = nextProps;
this.setState({
text
})
}
handleCopy = () => {
let {ID} = this.props;
let range, selection;
let input = document.getElementById(ID);
input.select(); // 获取到需要复制的内容
if (input.value && ((typeof input.select) == 'function')) {
range = document.createRange(); // 创建range对象
selection = document.getSelection(); // 返回一个Selection 对象,表示用户选择的文本范围或光标的当前位置。
range.selectNode(input);
selection.addRange(range);
input.setSelectionRange(0, input.value.length); // 为当前元素内的文本设置备选中范围
let successful = document.execCommand('copy'); // 使用document.execCommand()方法, copy指令复制选中的文字到粘贴板的功能
if (!successful) {
this.props.onCopy(false);
window.clipboardData.setData('text', this.state.text); // 解决部分浏览器复制之后没有粘贴到粘贴板,使用浏览器自带的粘贴板
} else {
this.props.onCopy(true)
}
} else {
this.props.onCopy(false)
}
};
render() {
const {text} = this.state;
return (
<div className="common-copy-clip" onClick={() => this.handleCopy()}>
<textarea readOnly="readonly" id={this.props.ID} value={text}></textarea>
{this.props.children}
</div>
)
}
}
export default CopyClip 2. css
.common-copy-clip {
position: relative;
textarea {
position: absolute;
top: 0;
opacity: 0;
}

}

原文地址:https://segmentfault.com/a/1190000016894376

js实现复制粘贴功能的更多相关文章

  1. 通过如何通过js实现复制粘贴功能

    在ie中window.clipboardData(剪切板对象)是可以被获取,所以利用这个方法我们可以实现在IE当中复制粘贴的功能,demo如下! <html> <head> & ...

  2. 在html页面通过js实现复制粘贴功能

    前言:要实现这个功能,常用的方式大概分为两类,第一种就是上插件,这个网上有大把,第二种就是直接用几行JS来实现. 这次说第二种实现方式,这方式有很大的局限性,只能用表单元素,并且不能设置disable ...

  3. JS ----实现复制粘贴功能 (剪切板应用clipboardData)

    注意:ie7,与ie8 对网页有个复制的权限,需在“安全”中的“自定义级别”的脚本中设置 clipboardData 对象 提供了对剪贴板的访问. 三个方法 :1.clearData(sDataFor ...

  4. .NET 实现复制粘贴功能

    老是把自己当作珍珠,就时时有怕被埋没的痛苦.把自己当作泥土吧,让众人把你踩成一条道路. -----<泥土>鲁藜 .NET如何实现复制粘贴功能,具体代码如下: aspx文件: <div ...

  5. Android EditText 取消复制粘贴功能,取消横向全屏编辑功能(一)

    在做一些安全性的软件时候常常要考虑取消 EditText 上的复制粘贴功能以确保安全性.下面就记录了这个方法: 首先在API-11以下的版本很简单,只需要在Xml布局文件或者用代码把长按属性设置成fa ...

  6. 在CMD命令行和PowerShell中实现复制粘贴功能

    在CMD命令行和PowerShell中实现复制粘贴功能         常常使用命令行或者PowerShell的朋友肯定会遇到这样的情况:粘贴文本非常easy,右键--选择粘贴就可以,可是想要复制命令 ...

  7. 仿复制粘贴功能,长按弹出tips的实现

    方案分析: 方案一:监听长按事件弹出PopupWindow[可行,缺点布局是固定的,小语种下会出现菜单截断现象] 方案二:弹出ContextMenu[不可行,因为ContextMenu的菜单是上下排列 ...

  8. iOS开发之--复制粘贴功能

    复制粘贴功能,代码如下: 1.复制功能 UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = ...

  9. Java io流完成复制粘贴功能

    JAVA 中io字节输入输出流 完成复制粘贴功能: public static void main(String[] args) throws Exception{        // 创建输入流要读 ...

随机推荐

  1. CentOS 7 设置系统语言为英文并解决 cannot change locale 问题

    首次安装Cent OS 7.6时,将系统语言设置成了中文.后续学习和使用过程中却发现种种不便,甚至有翻译错误.为锻炼自己的英文能力,所以将系统语言设置问英文. 编辑 locale 配置文件,将 LAN ...

  2. 如何使用go打出hell word

    今天给大家带来一篇如何使用go打出hell word(手动滑稽) 关于go介绍的话,我就不多说了,在百度上一搜一大堆, 要使用的软件Visual Studio Code(VScode) 下载go的地址 ...

  3. 【Python】Python3.4+Matplotlib详细安装教程

    网上找了很多教程,这个还不错. 传送门:https://blog.csdn.net/xqf1528399071/article/details/52233895

  4. Java正确URL解码方式:URLDecoder.decode

    //解码,为了解决中文乱码 String str = URLDecoder.decode(request.getParameter("orderJson"),"UTF-8 ...

  5. java sevlet Session

    * 如果浏览器支持Cookie,创建Session的时候会把SessionId保存在Cookie中 * 否则必须自己编程使用URL重写的方式实现Session:response.encodeURL()

  6. python之请求报文对比(假定最多二维字典)

    两段请求报文,判断不一样的key和value,只判断d2里和d1不同的值,和全部不同的key ok_req={ "version": "9.0.0", &quo ...

  7. [已读]跨终端web

    13年去听阿里技术嘉年华,鬼道分享了<移动优先前端产品的探索>.今年我买这本书,事实上是被高大上的目录吸引→ → 买来后发现,嘿,似曾相识啊,但还是老老实实得花一下午把书翻了一遍.翻完之后 ...

  8. RHEL7.2安装及配置实验环境

    截图太多了,就不一一上传了,请查看这个分享网址 http://pan.baidu.com/s/1kVeYANH 什么时候博客更新下能直接把图一下复制进来多好!省事.

  9. Apache Kylin Cube 的构建过程

    不多说,直接上干货! 1. Cube的物理模型 Cube物理模型 如上图所示,一个常用的3维立方体,包含:时间.地点.产品.假如data cell 中存放的是产量,则我们可以根据时间.地点.产品来确定 ...

  10. Properties没有被注意的地方

    源起: 今天阅读源码时发现一个地方不理解: 为什么以下代码第10行 get() 之后value为null时还去 getProperty() 呢? org.springframework.util.Co ...