所有分类
  • 所有分类
  • Html5资源
  • React资源
  • Vue资源
  • Php资源
  • ‌小程序资源
  • Python资源

 copy-to-clipboard – 轻量级零依赖剪贴板操作库,一行代码搞定复制功能

前言

在现代 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

评论0

显示验证码
没有账号?注册  忘记密码?