摘要:在項(xiàng)目中使用到復(fù)制粘貼功能,雖然網(wǎng)上有很多大牛封裝了很多的插件,但是還是想不去使用插件,就像自己來實(shí)現(xiàn)這個(gè)功能。
在項(xiàng)目中使用到復(fù)制粘貼功能,雖然網(wǎng)上有很多大牛封裝了很多的插件,但是還是想不去使用插件,就像自己來實(shí)現(xiàn)這個(gè)功能。
初步想法: 1. 獲取到需要復(fù)制的內(nèi)容,這里我可以將需要復(fù)制的內(nèi)容放在input或者textarea的value中,然后使用input的select()方法來獲取到值; 2. 獲取到值了,那我下一步就是復(fù)制了,document.execCommand()方法可以操作很多功能,這里我可以使用他的copy復(fù)制選中的文字到粘貼板的功能; 3. 復(fù)制功能實(shí)現(xiàn)了,但是這個(gè)input或者textarea不是我頁面布局中所需要的,那我可以將input或者textarea設(shè)置成透明的; 代碼實(shí)現(xiàn): 1. js: import React, {PureComponent} from "react"; import PropTypes from "prop-types"; import "./index.less" class CopyClip extends PureComponent { static propTypes = { text: PropTypes.any, //文字內(nèi)容 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(); // 獲取到需要復(fù)制的內(nèi)容 if (input.value && ((typeof input.select) == "function")) { range = document.createRange(); // 創(chuàng)建range對(duì)象 selection = document.getSelection(); // 返回一個(gè)Selection 對(duì)象,表示用戶選擇的文本范圍或光標(biāo)的當(dāng)前位置。 range.selectNode(input); selection.addRange(range); input.setSelectionRange(0, input.value.length); // 為當(dāng)前元素內(nèi)的文本設(shè)置備選中范圍 let successful = document.execCommand("copy"); // 使用document.execCommand()方法, copy指令復(fù)制選中的文字到粘貼板的功能 if (!successful) { this.props.onCopy(false); window.clipboardData.setData("text", this.state.text); // 解決部分瀏覽器復(fù)制之后沒有粘貼到粘貼板,使用瀏覽器自帶的粘貼板 } else { this.props.onCopy(true) } } else { this.props.onCopy(false) } }; render() { const {text} = this.state; return (this.handleCopy()}> {this.props.children}) } } export default CopyClip 2. css .common-copy-clip { position: relative; textarea { position: absolute; top: 0; opacity: 0; }
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98961.html
摘要:最近公司需要做一個(gè)實(shí)現(xiàn)復(fù)制的功能,本來以為會(huì)是很簡單兩三行代碼的事,后來發(fā)現(xiàn)網(wǎng)上說的那些原生實(shí)現(xiàn)復(fù)制的方法很多瀏覽器因?yàn)榘踩脑蚨疾恢С至耍瑖L試了很長時(shí)間,還是死心了,決定使用第三方的庫。 最近公司需要做一個(gè)js實(shí)現(xiàn)復(fù)制的功能,本來以為會(huì)是很簡單兩三行js代碼的事,后來發(fā)現(xiàn)網(wǎng)上說的那些原生js實(shí)現(xiàn)復(fù)制的方法很多瀏覽器因?yàn)榘踩脑蚨疾恢С至耍瑖L試了很長時(shí)間,還是死心了,決定使用第三方...
摘要:取消默認(rèn)的復(fù)制事件被復(fù)制的文字等下插入防知乎掘金復(fù)制一兩個(gè)字則不添加版權(quán)信息超過一定長度的文字就添加版權(quán)信息作者鏈接來源掘金著作權(quán)歸作者所有。以上參考資料高程操作剪貼板網(wǎng)頁上如何實(shí)現(xiàn)禁止復(fù)制粘貼以及如何破解原生實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本 showImg(https://segmentfault.com/img/remote/1460000015942602?w=1280&h=720); 前言...
摘要:取消默認(rèn)的復(fù)制事件被復(fù)制的文字等下插入防知乎掘金復(fù)制一兩個(gè)字則不添加版權(quán)信息超過一定長度的文字就添加版權(quán)信息作者鏈接來源掘金著作權(quán)歸作者所有。以上參考資料高程操作剪貼板網(wǎng)頁上如何實(shí)現(xiàn)禁止復(fù)制粘貼以及如何破解原生實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本 showImg(https://segmentfault.com/img/remote/1460000015942602?w=1280&h=720); 前言...
摘要:取消默認(rèn)的復(fù)制事件被復(fù)制的文字等下插入防知乎掘金復(fù)制一兩個(gè)字則不添加版權(quán)信息超過一定長度的文字就添加版權(quán)信息作者鏈接來源掘金著作權(quán)歸作者所有。以上參考資料高程操作剪貼板網(wǎng)頁上如何實(shí)現(xiàn)禁止復(fù)制粘貼以及如何破解原生實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本 showImg(https://segmentfault.com/img/remote/1460000015942602?w=1280&h=720); 前言...
摘要:首先引用文本文檔要用復(fù)制按鈕要用去掉文字檢查,不可編輯,插件自帶的屬性樣式代碼至此,兼容移動(dòng)端和端的復(fù)制粘貼功能完美實(shí)現(xiàn),感謝作者作者來源原文版權(quán)聲明本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接 1.首先引用clipboard.js 2.html 文本文檔要用textarea,復(fù)制按鈕要用button 9999999 spellcheck=false去掉文字檢查,readonly不可編輯...
閱讀 3040·2021-10-13 09:39
閱讀 1883·2021-09-02 15:15
閱讀 2447·2019-08-30 15:54
閱讀 1808·2019-08-30 14:01
閱讀 2607·2019-08-29 14:13
閱讀 1418·2019-08-29 13:10
閱讀 2735·2019-08-28 18:15
閱讀 3890·2019-08-26 10:20