分享js粘帖屏幕截图到web页面插件screenshot-paste


Posted in Javascript onAugust 21, 2020

在很多场合下,我们可能有这样的需求:提供个屏幕截图上传到系统,作为一个凭证。传统的操作方式是:屏幕截图,保存文件到本地,在web页面上选择本地文件并上传,这里至少需要三步。有没有可能直接将截图粘帖到web页面上,然后上传?答案是:可以的。这就是本文要介绍的内容了。

由于我的项目有上传屏幕截图这样的需求,为了用户体验更佳,减少操作步骤,我在网上搜了一遍之后,找到了一些眉目。为了便于复用和共享,我又对该功能做了一些封装,于是便有了这个插件 screenshot-paste。运行效果如下图:

分享js粘帖屏幕截图到web页面插件screenshot-paste

插件调用示例:

<html>
<head>
 <title>screenshot paste example</title>
 <meta charset='utf-8'>
</head>
<body>
 <input type="text" id="demo" placeholder="ctrl+v 粘帖到这里"/>
 <div>
 <div id="imgPreview" style="border:1px solid #e0e0e0;margin-top:10px;display:inline;"></div>
 </div> 
 <script type="text/javascript" src="jquery.min.js"></script>
 <script type="text/javascript" src="js/screenshot-paste.js"></script>
 <script type="text/javascript">
 $('#demo').screenshotPaste({
 imgContainer:'#imgPreview'
 });
 </script>
</body>
</html>

插件依赖:

从调用示例中,我们可以看到,这个插件依赖如下:

1)需要引用jquery

2)插件本身screenshot-paste.js

3)需要一个textbox和图片预览div

插件可配置项:

var options = {
 imgContainer: '#imgPreview', //预览图片的容器 
 imgHeight:200 //预览图片的默认高度 
};

插件方法:

该插件目前只有一个方法 getImgData,调用示例如下:

var imgData = $('#demo').screenshotPaste('getImgData');
值得一提的是,该方法返回的是img的src属性里面的内容,即base64编码的图片数据内容。

分享js粘帖屏幕截图到web页面插件screenshot-paste

这样的数据上传到服务器之后,需要用base64解码,解码示例代码如下(C#版):

private string UploadImage(string imageData)
 {
 imageData = imageData.Remove(0, imageData.IndexOf(',') + 1);//字符串中截图base64编码数据

 var bytes = Convert.FromBase64String(imageData);//base64解码
 var url = BLLOrderImg.UploadImg(bytes);//本行及以下代码行的内容可忽略

 return url;
 }

插件源码:

(function ($) {
 $.fn.screenshotPaste=function(options){
 var me = this;

 if(typeof options =='string'){
 var method = $.fn.screenshotPaste.methods[options];

 if (method) {
 return method();
 } else {
 return;
 }
 }

 var defaults = {
 imgContainer: '', //预览图片的容器
 imgHeight:200 //预览图片的默认高度
 };
 
 options = $.extend(defaults,options);

 var imgReader = function( item ){
 var file = item.getAsFile();
 var reader = new FileReader();
 
 reader.readAsDataURL( file );
 reader.onload = function( e ){
 var img = new Image();

 img.src = e.target.result;

 $(img).css({ height: options.imgHeight });
 $(document).find(options.imgContainer)
 .html('')
 .show()
 .append(img);
 };
 };
 //事件注册
 $(me).on('paste',function(e){
 var clipboardData = e.originalEvent.clipboardData;
 var items, item, types;

 if( clipboardData ){
 items = clipboardData.items;

 if( !items ){
  return;
 }

 item = items[0];
 types = clipboardData.types || [];

 for(var i=0 ; i < types.length; i++ ){
  if( types[i] === 'Files' ){
  item = items[i];
  break;
  }
 }

 if( item && item.kind === 'file' && item.type.match(/^image\//i) ){
  imgReader( item );
 }
 }
 });

 $.fn.screenshotPaste.methods = {
 getImgData: function () {
 var src = $(document).find(options.imgContainer).find('img').attr('src');

 if(src==undefined){
  src='';
 }

 return src;
 }
 };
 };
})(jQuery);

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
jQuery中创建实例与原型继承揭秘
Dec 21 Javascript
js读取cookie方法总结
Oct 31 Javascript
举例讲解Node.js中的Writable对象
Jul 29 Javascript
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
Angular学习笔记之angular的$filter服务浅析
Nov 12 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
js实现简单的网页换肤效果
Jan 18 Javascript
Vue单文件组件的如何使用方式介绍
Jul 28 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
Vue使用watch监听一个对象中的属性的实现方法
May 10 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
JQuery用户名校验的具体实现
Mar 18 #Javascript
基于javascript实现页面加载loading效果
Sep 15 #Javascript
JQuery fileupload插件实现文件上传功能
Mar 18 #Javascript
javascript移动开发中touch触摸事件详解
Mar 18 #Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
Mar 18 #Javascript
基于jQuery实现收缩展开功能
Mar 18 #Javascript
基于javascript显示当前时间以及倒计时功能
Mar 18 #Javascript
You might like
聊天室php&amp;mysql(三)
2006/10/09 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
PHP 正则表达式小结
2015/02/12 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
python正则表达式re模块详解
2014/06/25 Python
常见的python正则用法实例讲解
2016/06/21 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
python import 上级目录的导入
2020/11/03 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
2015年新农合工作总结
2015/03/30 职场文书
运动会通讯稿300字
2015/07/20 职场文书
调解协议书范本
2016/03/21 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis