当前位置:首页 > JavaScript

js实现拷贝

2026-01-13 14:04:44JavaScript

实现文本拷贝

使用 document.execCommand 方法(已废弃但兼容性较好):

function copyText(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:

js实现拷贝

async function copyText(text) {
  try {
    await navigator.clipboard.writeText(text);
    console.log('Text copied to clipboard');
  } catch (err) {
    console.error('Failed to copy text: ', err);
  }
}

复制HTML内容

通过 Clipboard API 复制富文本:

async function copyHTML(html) {
  const blob = new Blob([html], { type: 'text/html' });
  const clipboardItem = new ClipboardItem({ 'text/html': blob });

  try {
    await navigator.clipboard.write([clipboardItem]);
  } catch (err) {
    console.error('Failed to copy HTML: ', err);
  }
}

复制图片到剪贴板

使用 Canvas 和 Clipboard API:

js实现拷贝

async function copyImage(imgElement) {
  const canvas = document.createElement('canvas');
  canvas.width = imgElement.width;
  canvas.height = imgElement.height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(imgElement, 0, 0);

  canvas.toBlob(async (blob) => {
    try {
      await navigator.clipboard.write([
        new ClipboardItem({ 'image/png': blob })
      ]);
    } catch (err) {
      console.error('Failed to copy image: ', err);
    }
  }, 'image/png');
}

处理权限问题

某些浏览器需要用户手势触发:

document.getElementById('copyBtn').addEventListener('click', async () => {
  try {
    await navigator.clipboard.writeText('要复制的文本');
  } catch (err) {
    console.error('需要用户交互才能访问剪贴板');
  }
});

兼容性处理

检测浏览器支持情况:

function canUseClipboardAPI() {
  return !!navigator.clipboard && typeof ClipboardItem !== 'undefined';
}

function canUseExecCommand() {
  return !!document.execCommand;
}

function copyWithFallback(text) {
  if (canUseClipboardAPI()) {
    navigator.clipboard.writeText(text);
  } else if (canUseExecCommand()) {
    copyText(text); // 使用第一个方法的实现
  } else {
    alert('您的浏览器不支持复制功能');
  }
}

标签: js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterv…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Jav…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…