位置: 编程技术 - 正文

js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)(auto.js粘贴代码)

编辑:rootadmin

推荐整理分享js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)(auto.js粘贴代码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js实现粘贴功能,auto.js粘贴代码,js复制粘贴事件,js 粘贴图片,js 粘贴 剪贴板,js获取粘贴的内容,js 粘贴图片,js复制粘贴事件,内容如对您有帮助,希望把文章链接给更多的朋友!

我们或多或少都使用过各式各样的富文本编辑器,其中有一个很方便功能,复制一张图片然后粘贴进文本框,这张图片就被上传了,那么这个方便的功能是如何实现的呢?

原理分析提取操作:复制=>粘贴=>上传在这个操作过程中,我们需要做的就是:监听粘贴事件=>获取剪贴板里的内容=>发请求上传为方便理解下文,需要先明白几点:

我们只能上传网页图(在网页上右键图片,然后复制)和截图(截图工具截的图片,eg:qq截图),不能粘贴上传系统里的图片(从桌面上、硬盘里复制),他们是存在完全不同的地方的。 截图工具截的图与在网页点击右键复制的图是有些不同的,因此处理方式也不一样。 知悉paste event这个事件:当进行粘贴(右键paste/ctrl+v)操作时,该动作将触发名为'paste'的剪贴板事件,这个事件的触发是在剪贴板里的数据插入到目标元素之前。如果目标元素(光标所在位置)是可编辑的元素(eg:设置了contenteditable属性的div。textarea并不行。),粘贴动作将把剪贴板里的数据,以最合适的格式,插入到目标元素里;如果目标元素不可编辑,则不会插入数据,但依然触发paste event。数据在粘贴的过程中是只读的。此段是翻译于w3.org_the-paste-action。 可惜的是,经过试验,发现chrome(当前最新版)、firefox(当前最新版)、ie对paste事件的实现并不是完全按照w3c来的,各自也有区别(w3c的paste标准也因此只是草案阶段)。

test代码及截图如下:

chrome:

js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)(auto.js粘贴代码)

event有clipboardData属性,且clipboardData有item属性,clipboardData.item中的元素(对象)有type和kind属性; 无论在哪进行粘贴,均可触发paste事件; 在div(未特殊声明时,本文div均指设置了contenteditable属性的div) 里粘贴截图,不显示图片。img.src为base编码字符串; 在div里粘贴网页图片,直接显示图片,img.src为图片地址。

firefox:

event有clipboardData属性,clipboardData没有item属性; 只有在textarea里或者可编辑的div(里才粘贴才触发paste事件; 在div里粘贴截图,直接显示图片,img.src为base编码字符串; 在div里粘贴网页图片,表现同chrome。

ie:(不截图了,可自行试验,其他浏览器同理<( ̄? ̄)/,因为懒...)

event没有clipboardData属性; 只在可编辑的div中粘贴才触发paste事件; 在div里粘贴截图,直接显示图片,img.src为base编码字符串; 在div里粘贴网页图片,表现同chrome。

监听了paste事件,也知道了表现形式,接下来就是如何获取数据了:chrome有特定的方法,利用clipboardData.items、getAsFile()、new FileReader()等api可以在paste回调函数里获取到剪贴板里图片的base编码字符串(无论是截图粘贴的还是网页图片复制粘贴的),ie,firefox没有这样的api,不过依然有办法可以获取,因为数据已经表现在img的src里了,对于截图粘贴的,直接取img的src属性值(base),对于网页粘贴的,则把地址传给后台,然后根据地址down下来,存在自己的服务器,最后把新地址返回来交给前端展示就ok了。为了保持一致性便于管理,统一将所有情况(截图、网页)中的img的src属性替换为自己存储的地址。因此可以得到以下核心代码(注释很全哦~~):

html展示:

前端js处理逻辑:

用express.js搭的简易后台的接收逻辑:

需要node环境:安装node=>npm intall=>node app.js)

标签: auto.js粘贴代码

本文链接地址:https://www.jiuchutong.com/biancheng/377464.html 转载请保留说明!

上一篇:js实现数组冒泡排序、快速排序原理(用js实现冒泡排序)

下一篇:js实现分割上传大文件(js 文件分割)

  • 企业出售资产要交增值税吗
  • 手工现金日记账怎么转下一页
  • 长期待摊费用摊销会计分录
  • 增值税零申报附加税怎么报
  • 结转发出材料会计分录
  • 公司给员工租赁住房算成本吗
  • 当地外包公司是干什么的
  • 福利费进项税转出的会计分录
  • 核定征收企业怎么分红的
  • 进口设备贴息政策2019
  • 原来已入帐的款现在收回帐务处理?
  • 支付明年报刊费
  • 企业所得税的减按征收如何计算
  • 民非企业补贴收入要缴纳增值税会计分录怎么写?
  • 独资企业个人所得税汇算清缴
  • 餐费适用税率
  • 资产负债表资产总额为负数
  • 税金当月计提当月缴纳
  • 工程款中包含增值税怎么处理
  • 冲减增值税进项税怎么处理
  • 双链表的删除操作算法,两条改链语句能调换位置吗?
  • 营改增后房地产企业账务处理
  • PHP:pg_field_prtlen()的用法_PostgreSQL函数
  • 分公司不纳入合并
  • et.exe进程占用
  • vue.js前端
  • 客户抽奖活动方案
  • vue程序运行过程
  • 海獭妈妈和新生儿的故事
  • php zend
  • 企业接受现金捐赠如何开具发票
  • AI:DeepSpeed Chat(一款帮用户训练自己模型的工具且简单/低成本/快 RLHF 训练类ChatGPT高质量大模型)的简介、安装、使用方法之详细攻略
  • thinkphp入口文件
  • 知识图谱实现方案
  • ip add命令是什么意思
  • 本年利润在借方代表亏损吗
  • python中默认值参数
  • 印花税怎么申报2023
  • 开民工工资专户函模板
  • 综合单价税率调整如何结算
  • 民办非企业单位是私立还是公立
  • 小微企业免税销售额和其他免税销售额的区别
  • 无票收入是怎么算的
  • 同级财政和本级财政
  • 社会保险中断后还可以续保吗
  • 个人转让不动产交印花税吗
  • 实收资本现金入账怎么办
  • 建筑企业收挂靠公司的管理费如何做账?
  • 非货币性资产交换和债务重组的区别
  • 收到社保局的稳岗通知
  • 租来设备本身原因致人损害
  • 收到货款会计分录怎么写
  • 不动产经营租赁会计分录
  • 结转成本的方法有几种
  • 公司市场部职能
  • 原始凭证的主要内容包括
  • mysql隐式类型转换规则
  • win8自启动在哪儿设置
  • centos7安装完成后无法启动
  • grub4dos linux
  • win8出现问题需要重启
  • js require()
  • ext.grid.panel
  • android 自定义dialog
  • angular中的$scope
  • Node.js中的什么模块是用于处理文件和目录的
  • sell脚本
  • 后台实时分流文件的shell脚本
  • Do All in Cmd Shell一切在命令行下完成第1/6页
  • nodejs接收form表单
  • python怎么写爬虫
  • 安卓调用系统相机
  • Unity3d C# Socket 下载文件 (同步向)
  • 面向对象的三大特征
  • 卸载python后模块库还用卸载吗
  • 收到虚开的增值税专用发票
  • 北京朝阳区地税服务大厅
  • 税务公文字体
  • 建筑增值税税率历次调整
  • 开地税发票的操作流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设