前端js实现粘贴图片到可编辑的div(其他标签也可)中

输入框中要实现粘贴图片功能,不能用input、textarea等输入框作为父容器,因为input、textarea中只能接受字符串,对于html标签不进行转义以及渲染。

所以用contenteditable='true'属性来使div(其他容器也可)实现可编辑,来模拟输入框,实现粘贴图片至输入框中的效果,提交数据给后端的时候可以用form提交,

也可用异步提交,form提交的时候将div中的数据全部放入form表单中的隐藏域即可,异步提交将div中的数据当做data传送即可。

js实现粘贴图片至可编辑的div中注意点:

粘贴的图片来源只能是QQ、微信、钉钉等聊天工具中产生的图片。(比如聊天记录中的图片、输入框中的截图、复制桌面上的图至输入框)


可以直接运行的代码:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3.     <head>  
  4.         <meta charset="utf-8" />  
  5.         <title></title>  
  6.         <style>  
  7.             body,html{  
  8.                 text-align: center;  
  9.             }  
  10.             #editDiv{  
  11.                 width:1000px;  
  12.                 display: inline-block;  
  13.                 height: 800px;  
  14.                 background:#fff;  
  15.                 border-radius:10px;  
  16.                 line-height: 20px;  
  17.                 padding:10px;  
  18.                 font-size: 14px;  
  19.                 color:#666;  
  20.                 resize: none;  
  21.                 outline: none;  
  22.                 overflow-y: scroll;  
  23.             }  
  24.             #editDiv{  
  25.                 border:1px solid #333;  
  26.                 border-color:rgba(169,169,169,1);  
  27.                 text-align: left;  
  28.             }  
  29.         </style>  
  30.     </head>  
  31.     <body>  
  32.         <div id="editDiv" contenteditable="true">  
  33.         </div>  
  34.     </body>  
  35.     <script src="js/jquery.min.js"></script>      
  36.     <script>  
  37.     document.querySelector('#editDiv').addEventListener('paste',function(e){  
  38.      var cbd = e.clipboardData;  
  39.         var ua = window.navigator.userAgent;  
  40.         // 如果是 Safari 直接 return  
  41.         if ( !(e.clipboardData && e.clipboardData.items) ) {  
  42.             return ;  
  43.         }  
  44.         // Mac平台下Chrome49版本以下 复制Finder中的文件的Bug Hack掉  
  45.         if(cbd.items && cbd.items.length === 2 && cbd.items[0].kind === "string" && cbd.items[1].kind === "file" &&  
  46.             cbd.types && cbd.types.length === 2 && cbd.types[0] === "text/plain" && cbd.types[1] === "Files" &&  
  47.             ua.match(/Macintosh/i) && Number(ua.match(/Chrome\/(\d{2})/i)[1]) < 49){  
  48.             return;  
  49.         }  
  50.         for(var i = 0; i < cbd.items.length; i++) {  
  51.             var item = cbd.items[i];  
  52.             if(item.kind == "file"){  
  53.                 var blob = item.getAsFile();  
  54.                 if (blob.size === 0) {  
  55.                     return;  
  56.                 }  
  57.                 // blob 就是从剪切板获得的文件 可以进行上传或其他操作  
  58.                 /*-----------------------与后台进行交互 start-----------------------*/  
  59.                 /*var data = new FormData();  
  60.                 data.append('discoverPics', blob);  
  61.                 $.ajax({  
  62.                     url: '/discover/addDiscoverPicjson.htm',  
  63.                     type: 'POST',  
  64.                     cache: false,  
  65.                     data: data,  
  66.                     processData: false,  
  67.                     contentType: false,  
  68.                     success:function(res){  
  69.                         var obj = JSON.parse(res);  
  70.                         var wrap = $('#editDiv');  
  71.                         var file = obj.data.toString();  
  72.                         var img = document.createElement("img");  
  73.                         img.src = file;  
  74.                         wrap.appendChild(img);  
  75.                     },error:function(){  
  76.                           
  77.                     }  
  78.                 })*/  
  79.                 /*-----------------------与后台进行交互 end-----------------------*/  
  80.                 /*-----------------------不与后台进行交互 直接预览start-----------------------*/  
  81.                 var reader = new FileReader();  
  82.                 var imgs = new Image();   
  83.                 imgs.file = blob;  
  84.                 reader.onload = (function(aImg) {  
  85.                   return function(e) {  
  86.                     aImg.src = e.target.result;  
  87.                   };  
  88.                 })(imgs);  
  89.                 reader.readAsDataURL(blob);  
  90.                 document.querySelector('#editDiv').appendChild(imgs);  
  91.                 /*-----------------------不与后台进行交互 直接预览end-----------------------*/  
  92.             }  
  93.         }  
  94.     }, false);  
  95.     </script>  
  96. </html>  

猜你喜欢

转载自blog.csdn.net/zshake/article/details/80560931
今日推荐