这周工作中,遇到了一个文章编辑的功能需求,需要支持图片黏贴上传并预览,但是使用我们公司自己封装的富文本编辑器,发现居然没有黏贴上传图片的功能,额。。。心想,公司真是该有的功能没有,不该有的功能一大堆。。。没办法,只能百度自己实现如何实现黏贴上传图片功能。

(1)html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图片黏贴上传</title><style>#content {margin:0 auto;width:600px;height:600px;border:1px solid black;}</style>
</head>
<body><!-- 内容区域 --><div id="content" contenteditable="true"></div>
</body>
</html>

(2)添加监听事件

监听黏贴操作,即:ctrl+v的动作,js里面是paste事件。

<script>var content = document.getElemmentById("content")// 添加监听事件pastecontent.addEventListener('paste', function (e){// 具体操作});
</script>

(3)从clipboardData中获取黏贴板数据

监听paste事件,方法参数中的e里面有个clipboardData属性,该属性中包含了黏贴板数据,可以是字符串文本,也可以是图片文件。

<script>var content = document.getElemmentById("content")// 添加监听事件pastecontent.addEventListener('paste', function (e){// 黏贴版没有数据,则直接结束if (!(e.clipboardData && e.clipboardData.items)) {return;}// 黏贴版数据项,是个数组var data = e.clipboardData.items;if (data && data.length) {// TODO 具体操作}e.preventDefault();});
</script>

(4)判断是文本还是图片文件

if (data && data.length) {var item = data[0];// 判断是文本还是图片文件if (item.kind == 'string') {// 获取文本内容var text = event.clipboardData.getData('Text');// 设置到content中content.innerHTML = text;} else if (item.kind == 'file') {// 获取文件var file = item.getAsFile();// 图片插入div中var reader = new FileReader();reader.readAsDataURL(file);reader.onload = function (event) {var img = document.createElement("img");img.src = event.target.result;content.appendChild(img);}}
}

(5)完整代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图片黏贴上传</title><style>#content {margin:0 auto;width:600px;height:600px;border:1px solid black;}</style>
</head>
<body><!-- 内容区域 --><div id="content" contenteditable="true"></div>
<script>var content = document.getElemmentById("content")// 添加监听事件pastecontent.addEventListener('paste', function (e){// 黏贴版没有数据,则直接结束if (!(e.clipboardData && e.clipboardData.items)) {return;}// 黏贴版数据项,是个数组var data = e.clipboardData.items;if (data && data.length) {var item = data[0];// 判断是文本还是图片文件if (item.kind == 'string') {// 获取文本内容var text = event.clipboardData.getData('Text');// 设置到content中content.innerHTML = text;} else if (item.kind == 'file') {// 获取文件var file = item.getAsFile();// 图片插入div中var reader = new FileReader();reader.readAsDataURL(file);reader.onload = function (event) {var img = document.createElement("img");img.src = event.target.result;content.appendChild(img);}}}e.preventDefault();});
</script>
</body>
</html>

(6)效果演示

以上就是使用JavaScript实现图片黏贴上传并且预览的功能。​​​​​​​

JavaScript实现黏贴上传图片功能相关推荐

  1. 怎样实现前端裁剪上传图片功能

    怎样实现前端裁剪上传图片功能 由于前端是不能直接操作本地文件的,要么通过<input type="file">用户点击选择文件或者拖拽的方式,要么使用flash等第三方 ...

  2. ckeditor php 上传图片_ckeditor 4上传图片功能配置方法

    ckeditor 4上传图片功能配置方法 发布于 2015-01-04 10:04:08 | 2375 次阅读 | 评论: 2 | 来源: PHPERZ CKEditor网页编辑器CKEditor 即 ...

  3. php web裁剪图片上传,WEB前端实现裁剪上传图片功能

    最后的效果如下: 这里面有几个功能,第一个是支持拖拽,第二个压缩,第三个是裁剪编辑,第四个是上传和上传进度显示,下面依次介绍每个功能的实现: 1. 拖拽显示图片 拖拽读取的功能主要是要兼听html5的 ...

  4. ckeditor3.0.1上传图片功能(.net版本)

    ckeditor3.0.1上传图片功能 ckeditro中本身没有带上传功能,那就要用到组件 Ckfinder 下载地址 http://ckfinder.com/ 别下错了 是.net版本的 配置就简 ...

  5. wcf 返回图片_WCF实现上传图片功能

    初次学习实现WCF winform程序的通信,主要功能是实现图片的传输. 下面是实现步骤: 第一步: 首先建立一个类库项目TransferPicLib,导入wcf需要的引用System.Service ...

  6. 用javascript实现自我执行功能的目的是什么?

    在javascript中,什么时候要使用它: (function(){//Bunch of code... })(); 在此: //Bunch of code... #1楼 我简直不敢相信答案中没有提 ...

  7. 图片上传组件_配置Django-TinyMCE组件 实现上传图片功能

    Django自带的Admin后台,好用,TinyMCE作为富文本编辑器,也蛮好用的,这两者结合起来在做博客的时候很方便(当然博客可能更适合用Markdown来写),但是Django-TinyMCE这个 ...

  8. 让我们了解Set及其在JavaScript中的独特功能

    by Asif Norzai 通过Asif Norzai 让我们了解Set及其在JavaScript中的独特功能

  9. ionic html5 上传图片,ionic4+angular7+cordova上传图片功能的实例代码

    前言 ionic是一个垮平台开发框架,可通过web技术开发出多平台的应用.但只建议开发简单应用.复杂的应用需要用到许多cordova插件,而cordova插件的更新或者移动平台的更新很可能导致插件的不 ...

  10. java ajax传输图片_Java使用Ajax实现跨域上传图片功能

    说明 : 图片服务器是用Nginx搭建的,用的是PHP语言 这个功能 需要 用到两个js文件: jquery.js和jQuery.form.js function submitImgSize1Uplo ...

最新文章

  1. 剖析一个再次调整的seo排名案例
  2. CodeForces-734E Anton and Tree 树的直径
  3. 对比学习simSiam(一)--Exploring Simple Siamese Representation Learning总体理解
  4. 怎么把PDF文件空白页删除
  5. EasyUI层与拖拽系列控件
  6. 燃料电池厂商的市场竞争
  7. Hive,Pig,HBase 傻傻分不清楚
  8. springboot框架(2):整合junit4
  9. AcWing 658. 一元二次方程公式
  10. 魔兽世界mysql启动不了_WOW 魔兽世界单机版 3.3 不能启动服务器的解决方案 | 学步园...
  11. xctf攻防世界 MISC高手进阶区 适合作为桌面、stage1
  12. 阿里云香港服务器被打流量攻击怎么办
  13. java图片轮播_轮播图制作
  14. 男孩女孩和他们的父母的有趣问题
  15. HDFS心跳机制是什么?
  16. Python数据分析系列之——王一博微博转发量分析
  17. pycharm 使用conda虚拟环境
  18. 【华为OD】【003-求N阶方阵的和】
  19. Aircrack-ng之Airmon-ng命令
  20. Revit二次开发-CurveLoop的闭合处理

热门文章

  1. 工业控制pc是微型计算机,微型计算机工业控制.doc
  2. mtk java_MTK,mrp,JAVA你了解多少?
  3. mysql外码内码定义_Windows | 简体中文编码——输入码(外码)、区位码、国标码(交换码)、机内码(内码)、输出码(字形码)区别及联系...
  4. 金蝶k3wise云服务器配置,金蝶K3WISEV15.0系统配置说明
  5. 文件打不开只读或服务器未响应,Recovery Toolbox for PowerPoint(PPT修复工具)
  6. (附源码)Python在线办公系统 毕业设计 071116
  7. SQL Plus的使用详解(登录和常用命令)
  8. 多元统计分析及R语言建模(第四版)--第二章多元数据的数学表达式及R使用课后习题
  9. 除了Office和wps,还有什么办公软件比较好用?
  10. 介绍几款WAP网页制作工具(提供下载)