当前位置:网站首页>让Web页面中的编辑器支持黏贴或直接拖拽来添加图片「建议收藏」
让Web页面中的编辑器支持黏贴或直接拖拽来添加图片「建议收藏」
2022-08-04 13:09:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
基本原理是将剪贴板中的图片二进制数据转为Base64编码
代码:
1 <html>
2 <head>
3 </head>
4 <body>
5 <script src="http://cdn.bootcss.com/jquery/1.9.0/jquery.js">
6 </script>
7
8 <div id="edit" contenteditable="true" style="width:400px;height:400px;border:1px solid #f00">
9
10 </div>
11
12 <script>
13 function Edit( editEl ) {
14 editEl = $(editEl);
15
16 $(editEl).bind("paste", clipFn);
17
18 function clipFn(ev) {
19
20 //把剪贴板中的img通过canvas中专为base64字符串;
21 var canvas = document.createElement("canvas");
22 var context = canvas.getContext("2d");
23
24 //从word拷贝时候会得到text/html数据;
25 var html = $(ev.originalEvent.clipboardData.getData("text/html"));
26 html.find("img").each(function () {
27
28 var img = document.createElement("img");
29 var src = $(this).attr("src");
30 //.replace(/\\/gi,"\/");
31 var _this = this;
32 img.src = src;
33
34 img.onload = function () {
35 canvas.width = img.width;
36 canvas.height = img.height;
37 context.drawImage(img, 0, 0, img.width, img.height);
38 var dataBase64 = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
39 $("img").each(function (index, el) {
40 //匹配图片;
41 if ($(this).attr("src").replace(/[\/\\]/g,"") === src.replace(/[\/\\]/g,"")) {
42 el.src = dataBase64;
43 }
44 ;
45 }
46 );
47
48 img.onerror = function() {
49 console.log("图片加载失败");
50 }
51 ;
52
53 img.onload = null;
54 }
55 ;
56
57 }
58 );
59
60 //如果通过截图或者复制图片的方式会得到 type为"imgage"的图片;
61 var ele = ev.originalEvent.clipboardData.items;
62 for (var i = 0; i < ele.length; ++i) {
63 if ( ele[i].kind == 'file' && ele[i].type.indexOf('image/') !== -1 ) {
64
65 var blob = ele[i].getAsFile();
66 readBlobAsDataURL(blob, function( base64 ) {
67
68 var img= document.createElement('img');
69 img.setAttribute('src', base64);
70
71 editEl.append(img);
72 ;
73 }
74 );
75 //阻止默认事件, 避免重复添加;
76 ev.originalEvent.preventDefault();
77 }
78 ;
79 }
80 ;
81 }
82 ;
83
84 //绑定拖拽事件
85 //要给个响应
86 editEl.bind("dragover", function() {
87 return false;
88 }
89 );
90
91 //触发事件的响应
92 editEl.bind("drop", function(ev) {
93 loadImage( ev.originalEvent.dataTransfer.files[0] , function( result ) {
94 editEl.append( "<img src="+result+" />" );
95 }
96 );
97 return false;
98 }
99 );
100
101 // 加载 图像文件(url路径)
102 function loadImage(src, callback){
103 // 过滤掉 非 image 类型的文件
104 if(!src.type.match(/image.*/)){
105 if(window.console){
106 console.log("选择的文件类型不是图片: ", src.type);
107 }
108 else {
109 window.confirm("只能选择图片文件");
110 }
111 return;
112 }
113
114 // 创建 FileReader 对象 并调用 render 函数来完成渲染.
115 var reader = new FileReader();
116 // 绑定load事件自动回调函数
117 reader.onload = function(e){
118 // 调用前面的 render 函数
119 callback(e.target.result);
120 }
121 ;
122 // 读取文件内容
123 reader.readAsDataURL(src);
124 }
125 ;
126
127 function readBlobAsDataURL(blob, callback) {
128 var a = new FileReader();
129 a.onload = function(e) {
130 callback(e.target.result);
131 };
132 a.readAsDataURL(blob);
133 }
134 ;
135 }
136 ;
137 </script>
138
139 <script>
140 new Edit("#edit");
141 </script>
142 </body>
143 </html>
View Code
参考资料:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/107088.html原文链接:https://javaforall.cn
边栏推荐
- CLS-PEG-DBCO,胆固醇-聚乙二醇-二苯基环辛炔,可用于改善循环时间
- LeetCode 1403 Minimum subsequence in non-increasing order [greedy] HERODING's LeetCode road
- Ceres库运行,模板内报内存冲突问题。(已解决)
- MogDB/openGauss 3.0 扩容及缩容
- Chinese valentine's day of young people crazy to make money, earn 140000 a week
- ES 节点2G内存分析
- Js获取当前页面url参数
- Haproxy搭建web群集
- 秋招攻略秘籍,吃透25个技术栈Offer拿到手软
- LeetCode 1403 非递增顺序的最小子序列[贪心] HERODING的LeetCode之路
猜你喜欢
Motion Rule (16)-Union Check Basic Questions-Grid Game
到底什么是真正的HTAP?
CLS-PEG-DBCO,胆固醇-聚乙二醇-二苯基环辛炔,可用于改善循环时间
nVisual二次开发——第二章 nVisual API操作指南Swagger使用
持续交付(四)Jenkins多线程任务执行
5 cloud security management strategies enterprises should implement
技术分享| 小程序实现音视频通话
永磁同步电机FOC驱动代码讲解
GeoAO:一种快速的环境光遮蔽方案
The head module of the yolo series
随机推荐
双目立体视觉笔记(三)三角测量、极线校正
router---编程式导航
关于mysql join 的一些说明
【PHP实现微信公众平台开发—基础篇】第1章 课程介绍
干货丨数学规划视角下的分货优化解题思路
做项目管理有且有必要了解并学习的重要知识--PMP项目管理
Js获取当前页面url参数
到底什么是真正的HTAP?
论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement
Ultra-QuickSort
技术分享| 小程序实现音视频通话
DateTimeFormatter api
ES 节点2G内存分析
漏洞复现 - - - Alibaba Nacos权限认证绕过
router---Programmatic navigation
LeetCode 1403 Minimum subsequence in non-increasing order [greedy] HERODING's LeetCode road
博尔赫斯-诗中的经典语段
npm install出现的各种问题
js正则表达式提取内容
String is a reference type