前言
在现代 Web 开发中,复制文本到剪贴板是一个常见且重要的功能。无论是分享链接、复制代码片段,还是复制用户生成的内容,都需要一个可靠且易用的解决方案。copy-to-clipboard 是一个轻量级、无依赖的 JavaScript 库,专门用于处理剪贴板操作,为开发者提供了简单而强大的 API。
它是什么?
copy-to-clipboard 是一个纯 JavaScript 库,用于将文本内容复制到用户的剪贴板中。它支持现代浏览器和旧版浏览器,提供了统一的 API 来处理不同环境下的剪贴板操作。
主要特性
- 轻量级:无外部依赖,体积小巧
- 跨浏览器兼容:支持现代浏览器和 IE9+
- 简单易用:提供简洁的 API
- TypeScript 支持:完整的类型定义
- Promise 支持:支持异步操作
- 错误处理:完善的错误处理机制
安装方式
# npm
npm install copy-to-clipboard
# yarn
yarn add copy-to-clipboard
# pnpm
pnpm add copy-to-clipboard快速上手
基础用法
import copy from "copy-to-clipboard";
// 复制文本到剪贴板
const success = copy("Hello, World!");
if (success) {
  console.log("复制成功!");
} else {
  console.log("复制失败!");
}在 Vue 3 中使用
<template>
  <div>
    <button @click="copyText">复制文本</button>
    <p v-if="copyStatus">{{ copyStatus }}</p>
  </div>
</template>
<script setup>
import { ref } from "vue";
import copy from "copy-to-clipboard";
const copyStatus = ref("");
const copyText = () => {
  const text = "这是要复制的文本内容";
  const success = copy(text);
  if (success) {
    copyStatus.value = "复制成功!";
  } else {
    copyStatus.value = "复制失败,请手动复制";
  }
  // 3秒后清除状态
  setTimeout(() => {
    copyStatus.value = "";
  }, 3000);
};
</script>在 React 中使用
import React, { useState } from "react";
import copy from "copy-to-clipboard";
function CopyButton() {
  const [status, setStatus] = useState("");
  const handleCopy = () => {
    const text = "这是要复制的文本内容";
    const success = copy(text);
    if (success) {
      setStatus("复制成功!");
    } else {
      setStatus("复制失败,请手动复制");
    }
    setTimeout(() => setStatus(""), 3000);
  };
  return (
    <div>
      <button onClick={handleCopy}>复制文本</button>
      {status && <p>{status}</p>}
    </div>
  );
}
export default CopyButton;应用场景
分享链接
<template>
  <div class="share-section">
    <h3>分享这篇文章</h3>
    <div class="share-buttons">
      <button @click="copyLink" class="copy-btn">📋 复制链接</button>
    </div>
  </div>
</template>
<script setup>
import { ref } from "vue";
import copy from "copy-to-clipboard";
const copyLink = () => {
  const url = window.location.href;
  const success = copy(url);
  if (success) {
    // 显示成功提示
    showToast("链接已复制到剪贴板!");
  } else {
    showToast("复制失败,请手动复制链接");
  }
};
</script>代码片段复制
<template>
  <div class="code-block">
    <div class="code-header">
      <span class="language">JavaScript</span>
      <button @click="copyCode" class="copy-code-btn">
        {{ copied ? "已复制" : "复制代码" }}
      </button>
    </div>
    <pre><code>{{ code }}</code></pre>
  </div>
</template>
<script setup>
import { ref } from "vue";
import copy from "copy-to-clipboard";
const props = defineProps({
  code: String,
  language: String,
});
const copied = ref(false);
const copyCode = () => {
  const success = copy(props.code);
  if (success) {
    copied.value = true;
    setTimeout(() => {
      copied.value = false;
    }, 2000);
  }
};
</script>表单数据复制
<template>
  <form @submit.prevent="handleSubmit">
    <div class="form-group">
      <label>用户名</label>
      <input v-model="form.username" type="text" />
      <button type="button" @click="copyField('username')">复制</button>
    </div>
    <div class="form-group">
      <label>邮箱</label>
      <input v-model="form.email" type="email" />
      <button type="button" @click="copyField('email')">复制</button>
    </div>
    <button type="submit">提交</button>
    <button type="button" @click="copyAllData">复制所有数据</button>
  </form>
</template>
<script setup>
import { reactive } from "vue";
import copy from "copy-to-clipboard";
const form = reactive({
  username: "",
  email: "",
});
const copyField = (field) => {
  const value = form[field];
  if (value) {
    copy(value);
    showToast(`${field} 已复制`);
  }
};
const copyAllData = () => {
  const dataString = JSON.stringify(form, null, 2);
  copy(dataString);
  showToast("所有数据已复制");
};
</script>为什么选它?
轻量级设计
// 包大小对比
// copy-to-clipboard: ~1.2KB (gzipped)
// clipboard.js: ~3.2KB (gzipped)
// 原生 navigator.clipboard: 需要 HTTPS 和用户权限无依赖
// 不需要额外的依赖
// 不依赖 jQuery、React、Vue 等框架
// 可以在任何 JavaScript 环境中使用兼容性好
// 支持的浏览器
const supportedBrowsers = {
  Chrome: "4+",
  Firefox: "3.5+",
  Safari: "3.1+",
  Edge: "12+",
  IE: "9+",
};简单易用
// 一行代码搞定
import copy from "copy-to-clipboard";
copy("Hello, World!");总结
copy-to-clipboard 是现代 Web 开发中处理剪贴板操作的最佳选择之一,它简单、可靠、高效,能够满足大多数应用场景的需求。无论是简单的文本复制还是复杂的应用集成,它都能提供出色的解决方案。
 原文链接:https://code.ifrontend.net/archives/1261,转载请注明出处。		    			
		             
	
评论0