当前位置:首页 > 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,可以处理成功或失败的情况。

js实现复制功能实现

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

兼容性处理

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

js实现复制功能实现

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);
    });
}

处理权限问题

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

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

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

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

vue实现后台功能

vue实现后台功能

Vue 实现后台功能的方法 Vue.js 是一个流行的前端框架,适合构建后台管理系统。以下是实现后台功能的常见方法和步骤。 项目初始化 使用 Vue CLI 或 Vite 初始化项目: # Vue…

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…

vue功能实现难点

vue功能实现难点

Vue 功能实现的常见难点 响应式系统深度监听 Vue 的响应式系统基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3),但对嵌套对象或数组的深层属性变化需要额外…