1 . 情况及实际效果
当今互联网技术提交文档数最多的便是照片文档了,可是传统式web照片的截图提交必须:截图储存->挑选相对路径->储存后再点一下提交->挑选相对路径->提交->插进。
照片文档提交也必须:挑选相对路径再->提交->插进,流程复杂,互联网技术体验为王,假如适用截图粘贴提交、拖拽提交将大大提高体验。
当今知乎和github对当代访问器均适用这两种特点,闲来无事就学习培训完成了1下,今日就说1说这个1kb软件完成甚么作用,如何应用和基本原理。
最先看1下插实际效果:
截图后立即粘贴提交。
拖拽提交
http互联网
2.应用示例 立即启用:
XML/HTML Code拷贝內容到剪贴板
- <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>
- <script type="text/javascript" src="UploadImage.js"></script>
- new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//提交进行后的回调函数
- var img = new Image();
- img.src = xhr.responseText;
- this.appendChild(img);
- });
AMD/CMD
XML/HTML Code拷贝內容到剪贴板
- <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>
- <script type="text/javascript" src="require.js"></script>
- <script>
- require(['UploadImage'], function (UploadImage) {
- new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//提交进行后的回调函数
- var img = new Image();
- img.src = xhr.responseText;
- this.appendChild(img);
- });
- })
- </script>
3.访问器适用
当今版本号只适用下列,访问器,后期将会会适用更多访问器。
•IE11
•Chrome
•FireFox
•Safari(未测式,基础理论应当适用)
4.基本原理及源代码
1.粘贴提交
解决总体目标器皿(id)的paste恶性事件,载入e.clipboardData中的数据信息,假如是照片开展下列解决:
用H5 File API(FileReader)获得文档的base64编码,并搭建FormData多线程提交。
2.拖拽提交
解决总体目标器皿(id)的drop恶性事件,载入e.dataTransfer.files(H5 File API: FileList)中的数据信息,假如是照片并搭建FormData多线程提交。
下列是第一版本编码,较为简易。已不赘述。
部分关键编码
XML/HTML Code拷贝內容到剪贴板
- function UploadImage(id, url, key)
- {
- this.element = document.getElementById(id);
- this.url = url; //后端开发解决照片的相对路径
- this.imgKey = key || "PasteAreaImgKey"; //提到到后端开发的name
- }
- UploadImage.prototype.paste = function (callback, formData)
- {
- var thatthat = this;
- this.element.addEventListener('paste', function (e) {//解决总体目标器皿(id)的paste恶性事件
- if (e.clipboardData && e.clipboardData.items[0].type.indexOf('image') > ⑴) {
- var that = this,
- reader = new FileReader();
- file = e.clipboardData.items[0].getAsFile();//载入e.clipboardData中的数据信息:Blob目标
- reader.onload = function (e) { //reader载入进行后,xhr提交
- var xhr = new XMLHttpRequest(),
- fd = formData || (new FormData());;
- xhr.open('POST', thatthat.url, true);
- xhr.onload = function () {
- callback.call(that, xhr);
- }
- fd.append(thatthat.imgKey, this.result); // this.result获得照片的base64
- xhr.send(fd);
- }
- reader.readAsDataURL(file);//获得base64编号
- }
- }, false);
- }