窦秀芳 發表於 2019-12-20 01:13:00

React一键复制

<p>  如题,我们怎么在React或者其他的框架中实现一键复制呢,实际上实现一键复制的代码与框架无关,因为他是用的是原生的API,下面我们用React来实现一下</p>
<p>&nbsp; <span style="font-size: 16px"><strong>&nbsp; &nbsp;效果:</strong></span></p>
<p>  <img src="https://img2018.cnblogs.com/i-beta/1459059/201912/1459059-20191220005351509-207324161.gif" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>  <span style="font-size: 16px"><strong>核心代码:</strong></span></p>
<p>    直接将红框处改为需要复制的元素类名。(获取元素时注意一下我用的是querySelector)</p>
<p>    将该事件绑定到元素上,即可。完整代码在最下方</p>
<p>  <img src="https://img2018.cnblogs.com/i-beta/1459059/201912/1459059-20191220004421200-1939237735.png" alt=""></p>
<p> <span style="font-size: 15px"><strong> 完整代码:</strong></span></p>
<p><span style="font-size: 15px"><strong>    <span style="font-size: 13px">注意:Icon和message均是来自于antd组件库,如若没装antd,改成别的元素即可</span></strong></span></p>
<div class="cnblogs_code">
<pre>import React from 'react'<span style="color: rgba(0, 0, 0, 1)">;
import </span>'./App.css'<span style="color: rgba(0, 0, 0, 1)">;
import {Icon, message} from </span>'antd'<span style="color: rgba(0, 0, 0, 1)">;
class App extends React.Component{
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">一键复制功能</span>
<span style="color: rgba(0, 0, 0, 1)">    copy() {
      const copyEle </span>= document.querySelector('.contentText') <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取要复制的节点</span>
      const range = document.createRange(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创造range</span>
      window.getSelection().removeAllRanges(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除页面中已有的selection</span>
      range.selectNode(copyEle); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 选中需要复制的节点</span>
      window.getSelection().addRange(range); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行选中元素</span>
      const copyStatus = document.execCommand("Copy"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行copy操作</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对成功与否定进行提示</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (copyStatus) {
      message.success(</span>'复制成功'<span style="color: rgba(0, 0, 0, 1)">);
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      message.fail(</span>'复制失败'<span style="color: rgba(0, 0, 0, 1)">);
      }
      window.getSelection().removeAllRanges(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除页面中已有的selection</span>
<span style="color: rgba(0, 0, 0, 1)">    }
render() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
      </span>&lt;div className="App"&gt;
      &lt;div className="content"&gt;
          &lt;p className="contentTitle"&gt;
            &lt;<span style="color: rgba(0, 0, 0, 1)">Icon
            type</span>="copy"<span style="color: rgba(0, 0, 0, 1)">
            onClick</span>={<span style="color: rgba(0, 0, 255, 1)">this</span>.copy}/&gt;
          &lt;/p&gt;
          &lt;p className="contentText"&gt;<span style="color: rgba(0, 0, 0, 1)">
            我是要被复制的内容啊!!!
          </span>&lt;/p&gt;
      &lt;/div&gt;
      &lt;/div&gt;
<span style="color: rgba(0, 0, 0, 1)">    );
}
}

export </span><span style="color: rgba(0, 0, 255, 1)">default</span> App;</pre>
</div>
<p>&nbsp;</p>
<p>  <span style="font-size: 16px"><strong>原理:</strong></span></p>
<p><span style="font-size: 14px">  我们来看一下具体的步骤:(具体API使用可以查阅MDN)</span></p>
<p><span style="font-size: 14px">  1.&nbsp;</span>document.querySelector('.contentText') 获取需要复制的节点</p>
<p>  2.&nbsp;document.createRange(); 创造一个区域</p>
<p>  3.&nbsp;window.getSelection().removeAllRanges(); 将所有选区都清除(即被按住鼠标划中选择的部分)</p>
<p>  4.&nbsp;range.selectNode(copyEle); 选中区域要包含的对象</p>
<p>  5.&nbsp;document.execCommand("Copy");&nbsp;execCommand方法允许运行命令来操纵可编辑内容区域的元素。</p>
<p>  6.判断成功与否</p>
<p>  7.window.getSelection().removeAllRanges();&nbsp;将所有选区都清除(即被按住鼠标划中选择的部分)</p>
<p>&nbsp;</p>
<p><span style="font-size: 14px">&nbsp;</span></p>
<p><span style="font-size: 14px">通过以上的步骤,一键复制就做好啦!!</span></p>


</div>
<div id="MySignature" role="contentinfo">
    语雀链接🔗https://www.yuque.com/suihangadam
归来卧占楼千尺,梦落沧波明月舟。<br><br>
来源:https://www.cnblogs.com/suihang/p/12071117.html
頁: [1]
查看完整版本: React一键复制