export default cpText

lxf2023-04-05 11:55:01

=。=,近期需要一个复制作用,随手提醒复制,尽管之前读过,可还是忘掉,干脆又封装形式了一个库,方便日后应用。

// npm i cp-text
import cpText from 'cp-text';
cpText('随意字符串数组具体内容');

以下属于点击复制标志,开启拷贝

<img
  onClick={() => cpText(location.href)}
  width="20"
  src="https://blog-huahua.oss-cn-beijing.aliyuncs.com/blog/code/copy.png"
/>

默认设置拷贝以后,就会自动提醒-复制: export default cpText

基本原理

流行计划方案:execCommand 方式,兼容模式好,需要用到下表单元素。

当代计划方案:Clipboard API,当代兼容性设置基本上没什么问题,这是多线程,略微注意下

代码

/**
 * 复制文本,并提醒复制
 * @params text必须复制字符串数组 isShowTip默认设置是true
 *
 * <img onClick={()=>cpText(url)} width="20" src='https://blog-huahua.oss-cn-beijing.aliyuncs.com/blog/code/copy.png'/>
 */
export const cpText = async (text, isShowTip = true) => {
  const clipboard = navigator.clipboard;
  clipboard ? await clipboard.writeText(text) : copyByInput(text);
  isShowTip && showTip();
};
function copyByInput(text) {
  alert(text);
  // 建立input原素
  const input = document.createElement('input');
  // 取值 - 需要复制的内容
  input.value = text;
  // 插入文本文档
  document.body.appendChild(input);
  // 掩藏
  input.style.cssText = `position:fixed;clip:rect(0 0 0 0);top:10px`;
  // 选定
  input.select();
  // 拷贝
  document.execCommand('copy');
  // 清除input
  document.body.removeChild(input);
}
function showTip() {
  const eleTip = document.createElement('span');
  eleTip.innerHTML = '复制 ~ ';
  eleTip.style.cssText =
    'z-index:3333;position:absolute;top:40%;left:45%;padding:6px 12px;background-color:#333;color:#fff;font-size:14px;border-radius:6px;font-family:sans-serif;';
  document.body.appendChild(eleTip);
  setTimeout(() => {
    eleTip?.parentNode?.removeChild(eleTip);
  }, 1000);
}

export default cpText;

引入

  • 鑫旭大佬们的JS复制文字到粘贴板的简约完成及拓展