IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript复制图片和下载图片到本地 -> 正文阅读

[JavaScript知识库]JavaScript复制图片和下载图片到本地

JavaScript复制图片和下载图片到本地

基本代码结构

<div className="html-canvas-wrap" ref={canvasWrap}>
  <div className="html-canvas">
	<h3>标题</h3>
	<p>标题描述</p>
	<img src={TestImg} alt="" />
  </div>
  <button onClick={handleCopy}>execCommend copy</button>
  <button onClick={handleCopy2}>clipboard copy</button>
  <button onClick={handleSave}>保存图片到本地</button>
</div>

该功能依赖 html2anvas

npm i -S html2canvas

复制图片

execCommand

经测试在大多数社交工具中粘贴不可用

 // 实现 handleCopy 方法
 const handleCopy = () => {
   html2canvas(document.querySelector('.html-canvas'), {
     height: 60,
   }).then((canvas) => {
     let imgUrl = canvas.toDataURL('image/png')
     const image = document.createElement('img')
     image.src = imgUrl
     image.style.height = '60px'
     image.onload = function () {
       const selection = window.getSelection()
       if (selection.rangeCount > 0) {
         selection.removeAllRanges()
       }
       if (!document.queryCommandSupported('copy')) {
         console.log('浏览器不支持复制命令')
         return;
       }
       const range = document.createRange()
       range.selectNode(image)
       selection.addRange(range)
       document.execCommand('copy')
       selection.removeAllRanges()
     }
     canvasWrap.current.appendChild(image)
   })
 }
navigator.clipboard

可用但存在浏览器兼容性问题(主流浏览器都已经支持)

 // 实现handleCopy2 方法
 const getCanvas = (element) =>x
   new Promise((resolve) => {
     if (canvasRef.current) {
       return resolve(canvasRef.current)
     }
     html2canvas(element, {
       useCORS: true,
     }).then((canvas) => {
       canvasRef.current = canvas
       resolve(canvas)
     })
   })

const handleCopy2 = async () => {
	const canvas = await getCanvas(document.querySelector('.html-canvas'))
	canvas.toBlob(async (blob) => {
	  const data = [
		new ClipboardItem({
		  [blob.type]: blob,
		}),
	  ]
	  navigator.clipboard
		.write(data)
		.then(() => {
		  console.log('Copied to clipboard successfully!')
		})
		.catch(() => {
		  console.error('Unable to write to clipboard.')
		})
	})
}

保存图片到本地

 // 实现 handleSave 方法
 const handleSave = async () => {
   let canvas = await getCanvas(document.querySelector('.html-canvas'))
   const imgUrl = canvas.toDataURL('image/png')
   const aEle = document.createElement('a')
   aEle.download = 'download'
   aEle.href = imgUrl
   const event = new MouseEvent('click')
   aEle.dispatchEvent(event)
 }
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:40:43  更:2022-03-21 20:43:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:43:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码