首页 > 其他分享 >JS实现复制粘贴图片

JS实现复制粘贴图片

时间:2024-07-16 22:08:31浏览次数:10  
标签:const items JS 复制粘贴 编辑器 blob 图片

最近在开发公司的可视化编辑器应用, 同事们提了一个需求, 即可以直接复制图片到编辑器中粘贴, 生成对应的图片组件.

因为传统的点击上传太麻烦, 得先把图片保存到本地, 然后再回到编辑器点击上传, 选择图片. 流程太长了, 如果可以直接复制粘贴图片, 速度会更快, 体验也更好一些.

对于使用Figma之类设计工具的同学, 这几乎是强需求, 作为致力于开发最好用的可视化编辑器, 这个需求必须要满足.

然后就顺带研究了一下, 发现其实并不复杂, 我在codepen里面做了一个简单的demo, 可以点击体验:
copy-paste-image

大致的逻辑是:

  1. 监听paste事件, 在event对象中读取 clipboardData中的元素
  2. 判断元素是否是图片, 如果是图片的话, 获取blob值, 然后转成文件或者url使用.

核心代码如下:

document.addEventListener('paste', function(event) {
    const items = event.clipboardData.items;
    
    for (let i = 0; i < items.length; i++) {
        if (items[i].type.indexOf('image') !== -1) {
            const blob = items[i].getAsFile();
            const url = URL.createObjectURL(blob);
            imagePreview.src = url;
            imagePreview.style.display = 'block';
            pasteArea.textContent = '图片已粘贴,点击这里可以粘贴新图片';
            return;
        }
    }
    
    pasteArea.textContent = '剪贴板中没有图片,请复制一张图片后再尝试';
});

标签:const,items,JS,复制粘贴,编辑器,blob,图片
From: https://www.cnblogs.com/cmen/p/18306222

相关文章

  • 实时时钟、弱函数、json
    一、实时时钟时间戳(实时的时间【单位:s】):​ 使用"time.h"文件:​ mktime()——得到一个时间戳​ localtime() ——得到一个当前时间的结构体(包含:年-月-日时:分:秒)eg:time_ttimestamp=mktime(&utc_time);//得到一个时间戳(单位为秒)structtm*beijing_time=lo......
  • js需要同时发起百条接口请求怎么办?--通过Promise实现分批处理接口请求
    如何通过Promise实现百条接口请求?实际项目中遇到需要发起上百条Promise接口请求怎么办?前言不知你项目中有没有遇到过这样的情况,反正我的实际工作项目中真的遇到了这种玩意,一个接口获取一份列表,列表中的每一项都有一个属性需要通过另一个请求来逐一赋值,然后就有了这份封装真......
  • WPS批量将图片嵌入单元格
    选中单张图片Ctrl+A全选右键选择图片嵌入单元格注意:它是将图片嵌入在图片左上角所在的单元格内,需要确保每个被嵌入的单元格只有一个图片的左上角在其内部,否则会出现“一个单元格内不能插入多个图片的”的报错......
  • Nuxt.js头部魔法:轻松自定义页面元信息,提升用户体验
    扫描二维码关注或者微信搜一搜:编程智域前端至全栈交流与成长useHead 函数概述useHead是一个用于在Nuxt应用中自定义页面头部属性的函数。它由Unhead库提供支持,允许开发者以编程和响应式的方式设置每个页面的头部信息。useHead 函数类型useHead(meta:MaybeComputedRef<......
  • [JS] 深拷贝的实现
    浅拷贝和深拷贝的区别浅拷贝:浅拷贝指的是复制一个对象的时候,对于对象的一个属性,如果是基本数据类型,则复制其值;如果是引用数据类型,则复制其引用。深拷贝:深拷贝指的是复制一个对象的时候,对于对象的一个属性,如果是基本数据类型,则复制其值;如果是引用数据类型,则递归地深拷贝......
  • Java实现将json数据转换为sql insert语句
    Java实现将json数据转换为sqlinsert语句importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.JsonNode;importcom.fasterxml.jackson.databind.ObjectMapper;importjava.util.Iterator;importjava.util.Map;publicclassJson......
  • python+flask计算机毕业设计基于Vue.js的付费阅读小程序(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字化阅读已成为现代人获取知识、娱乐休闲的重要方式之一。然而,在海量信息面前,如何有效保护知识产权,激励内容创......
  • 新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,支持H.264与H.265编码格式,性能稳定、播放流畅;支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC、WS-FMP4、HTTP-FMP4等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时......
  • js worker
    index.js<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</tit......
  • C# 任意类型数据转JSON格式
    1publicclassObjectToJson2{3///<summary>4///List转成json5///</summary>6///<typeparamname="T"></typeparam>7///<paramname="jso......