当前位置:首页 > JavaScript

js实现复制功能

2026-02-28 17:57:29JavaScript

原生JavaScript实现复制功能

使用document.execCommand方法(已废弃但仍有广泛兼容性)

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

async function copyToClipboard(text) {
  try {
    await navigator.clipboard.writeText(text);
    console.log('内容已复制到剪贴板');
  } catch (err) {
    console.error('无法复制内容: ', err);
  }
}

处理无权限情况

添加权限检查和降级方案

async function safeCopy(text) {
  if (!navigator.clipboard) {
    return fallbackCopy(text);
  }

  try {
    await navigator.clipboard.writeText(text);
    return true;
  } catch {
    return fallbackCopy(text);
  }
}

function fallbackCopy(text) {
  const textarea = document.createElement('textarea');
  textarea.value = text;
  textarea.style.position = 'fixed';
  document.body.appendChild(textarea);
  textarea.focus();
  textarea.select();

  try {
    const successful = document.execCommand('copy');
    document.body.removeChild(textarea);
    return successful;
  } catch {
    document.body.removeChild(textarea);
    return false;
  }
}

复制特定元素内容

复制DOM元素内的文本

function copyElementText(elementId) {
  const element = document.getElementById(elementId);
  if (element) {
    const range = document.createRange();
    range.selectNode(element);
    window.getSelection().removeAllRanges();
    window.getSelection().addRange(range);
    document.execCommand('copy');
    window.getSelection().removeAllRanges();
  }
}

添加用户反馈

复制成功后提供视觉反馈

async function copyWithFeedback(text, feedbackElement) {
  try {
    await navigator.clipboard.writeText(text);
    if (feedbackElement) {
      feedbackElement.textContent = '已复制!';
      setTimeout(() => {
        feedbackElement.textContent = '';
      }, 2000);
    }
  } catch (err) {
    if (feedbackElement) {
      feedbackElement.textContent = '复制失败';
    }
  }
}

注意事项

  • 现代Clipboard API需要安全上下文(HTTPS或localhost)
  • 某些浏览器可能要求此API必须在用户交互事件中触发
  • 考虑添加降级方案以兼容旧浏览器
  • 移动设备上可能需要特殊处理选择范围

js实现复制功能

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

相关文章

vue.js实现轮播

vue.js实现轮播

vue.js实现轮播的方法 使用第三方库(如Swiper) 安装Swiper库: npm install swiper 在Vue组件中引入Swiper: <template>…

前端实现拖拽功能vue

前端实现拖拽功能vue

实现拖拽功能的基本方法 在Vue中实现拖拽功能可以通过HTML5的拖放API或第三方库如vuedraggable来完成。HTML5的拖放API提供了原生支持,而vuedraggable则简化了列表拖拽…

vue实现桌面功能

vue实现桌面功能

Vue 实现桌面功能的方法 Vue.js 可以通过结合 Electron 或 NW.js 等框架实现桌面应用开发。以下是几种常见的方法: 使用 Vue 与 Electron 结合 Electron…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现抽奖

js实现抽奖

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

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…