当前位置:首页 > JavaScript

js实现复制功能实现

2026-04-03 22:56:21JavaScript

使用 document.execCommand 方法

该方法已逐渐被弃用,但在某些旧浏览器中仍可使用。创建一个临时 textarea 元素,设置其值为要复制的文本,选中内容并执行复制命令。

function copyToClipboard(text) {
  const textarea = document.createElement('textarea');
  textarea.value = text;
  document.body.appendChild(textarea);
  textarea.select();
  document.execCommand('copy');
  document.body.removeChild(textarea);
}

使用 Clipboard API

现代浏览器推荐使用 Clipboard API 的 writeText 方法,它返回一个 Promise,可以处理成功或失败的情况。

function copyToClipboard(text) {
  navigator.clipboard.writeText(text)
    .then(() => {
      console.log('复制成功');
    })
    .catch(err => {
      console.error('复制失败:', err);
    });
}

兼容性处理

结合两种方法,先尝试使用 Clipboard API,失败时回退到 execCommand 方法。

function copyToClipboard(text) {
  if (navigator.clipboard) {
    navigator.clipboard.writeText(text).catch(() => {
      fallbackCopy(text);
    });
  } else {
    fallbackCopy(text);
  }
}

function fallbackCopy(text) {
  const textarea = document.createElement('textarea');
  textarea.value = text;
  textarea.style.position = 'fixed';
  document.body.appendChild(textarea);
  textarea.select();
  try {
    document.execCommand('copy');
  } catch (err) {
    console.error('复制失败:', err);
  }
  document.body.removeChild(textarea);
}

添加用户反馈

复制操作通常需要给用户视觉反馈,例如显示提示信息。

function copyToClipboard(text, feedbackElement) {
  navigator.clipboard.writeText(text)
    .then(() => {
      if (feedbackElement) {
        feedbackElement.textContent = '已复制';
        setTimeout(() => {
          feedbackElement.textContent = '';
        }, 2000);
      }
    })
    .catch(() => {
      fallbackCopy(text);
    });
}

处理权限问题

某些情况下可能需要请求剪贴板写入权限,特别是在安全上下文中。

js实现复制功能实现

async function requestClipboardPermission() {
  try {
    const { state } = await navigator.permissions.query({
      name: 'clipboard-write'
    });
    return state === 'granted';
  } catch (error) {
    return false;
  }
}

标签: 功能js
分享给朋友:

相关文章

vue实现ping功能

vue实现ping功能

实现Ping功能的思路 在Vue中实现Ping功能通常需要借助浏览器API或后端服务。由于浏览器环境限制,无法直接发送ICMP请求(传统Ping协议),但可通过以下两种方式模拟: HTTP请求模拟P…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

vue实现按钮实现点击功能

vue实现按钮实现点击功能

实现按钮点击功能 在Vue中实现按钮点击功能可以通过v-on指令或@缩写来绑定事件。以下是几种常见的实现方式: 使用v-on指令 通过v-on:click绑定点击事件,触发定义在methods中的方…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…