(点击上方公众号,可快速关注)
作者:郑武江(@OAuth_v2)
链接:seejs.me/2016/11/30/paste-snapshot/
作者:郑武江(@OAuth_v2)
链接:seejs.me/2016/11/30/paste-snapshot/
做这个尝试,只为了解决一个问题:如何在网页中读取剪贴板中的图片数据,并在页面中展示或保存到图片服务器 。场景可以简单描述为,通过任意屏幕截图工具(QQ、旺旺,PrintScreen键等),截图之后网页中的文本框内粘贴(Ctrl+V、右键等),并在页面中使用图片数据 。文字描述比较抽象,我们用一个gif图片来形象的展示一下效果:
ClipboardEvent(剪贴板事件)
ClipboardEvent 接口描述了与修改剪切板相关的事件,这些事件包括 cut 、copy 和 paste 事件 。
ClipboardEvent 接口描述了与修改剪切板相关的事件,这些事件包括 cut 、copy 和 paste 事件 。
先解决一个问题:为什么要说ClipboardEvent?
首先,无论是截图还是在网页中“***图片”,较终都是将图片数据存储到了系统剪贴板中 。其次,当执行“粘贴”操作的时候是将剪贴板中的数据读出来使用,而读取剪贴板中的图片(文件)数据,更需要直接使用paste事件完成 。
第二个问题:为什么要在文本框中“粘贴”,是必须的吗?
展开全文
先从paste事件来说,经测试paste事件可以绑定到任意HTML元素上的,并非必须使用文本框 。再来猜测下使用场景,粘贴操作涉及到数据写入问题,内容不可能写入到页面中的只读区域,所以按常理来说,只可能是粘贴到页面中的可写区域 。再者,较容易让人想到的场景便是一个聊天会话,因此首先想到的便是文本框控件 。
功能实现
功能逻辑比较简单,截图完成或在网页中***图片后,图片数据就保存到系统剪贴板上了 。我们代码中需要实现的就是在paste事件中实现剪贴板中的图像数据读取和处理逻辑 。拿到图像数据后,就可以根据自己的业务逻辑进行下一步操作了 。代码如下:
(function(){
varsender= document.getElementById('J_MsgSender'),
list= document.getElementById('J_MsgList');
functionpasteImage(imgObj){
varfile= imgObj.getAsFile?imgObj.getAsFile(): imgObj,reader= newFileReader();
// 读取文件后将其显示在网页中
reader.= function(e){
varimg= newImage(),p= document.('p');
img.src= https://www.soozhuozhou.com/e.target.result;
p.(img);
list.(p);
};
}
sender.addEventListener('paste',function(ev){
// 通过事件对象访问系统剪贴板
文章插图
varev= ev|| window.event,clipboardData= https://www.soozhuozhou.com/ev.clipboardData,
i= 0,items,item,files;
if(clipboardData){
items= clipboardData.items;
files= clipboardData.files;
if(files&& files.length){
pasteImage(files[0]);
return;
}
if(!items){return;}
for(;i< items.length;i++){
if(items[i].kind=== 'file'&& items[i].type.match(/^image//i)){
item= items[i];
break;
}
}
// 如果存在图片数据
if(item){
pasteImage(item);// 读取该图片
}
}
});
})();
(function(){
varsender= document.getElementById('J_MsgSender'),
【如何截图片 如何截图片水印】list= document.getElementById('J_MsgList');
functionpasteImage(imgObj){
varfile= imgObj.getAsFile?imgObj.getAsFile(): imgObj,reader= newFileReader();
// 读取文件后将其显示在网页中
reader.= function(e){
varimg= newImage(),p= document.('p');
img.src= https://www.soozhuozhou.com/e.target.result;
p.(img);
list.(p);
- 如何申购基金 怎样申购基金? 申购基金注意哪些问题?
- 如何进入dos 如何进入dos界面运行文件
- 如何观察 如何观察月相
- 新车如何保养 新车如何保养使用方法
- 如何锻炼身体 如何锻炼身体提高性功能
- 如何剪窗花 如何剪窗花春字
- 发烧了怎么办如何退烧 产妇发烧了怎么办如何退烧
- 如何戒烟 如何戒烟瘾
- 如何倒库 如何倒库移库图解
- 如何更新 如何更新微信较新版本