分享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 相关文章推荐
javascript 短路法代码精简
Aug 20 Javascript
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
jquery解决图片路径不存在执行替换路径
Feb 06 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
angular2使用简单介绍
Mar 01 Javascript
微信公众号 摇一摇周边功能开发
Dec 08 Javascript
javascript深拷贝的原理与实现方法分析
Apr 10 Javascript
解决vue+webpack打包路径的问题
Mar 06 Javascript
详解Vue之父子组件传值
Apr 01 Javascript
使用webpack4编译并压缩ES6代码的方法示例
Apr 24 Javascript
在layui tab控件中载入外部html页面的方法
Sep 04 Javascript
vue项目引入ts步骤(小结)
Oct 31 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新手上路(二)
2006/10/09 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
Extjs入门之动态加载树代码
2010/04/09 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python动态性强类型用法实例
2015/05/09 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
Python super()函数使用及多重继承
2020/05/06 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
python 如何设置守护进程
2020/10/29 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
一些Solaris面试题
2015/12/22 面试题
领导班子整改方案和个人整改措施
2014/10/25 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
matlab xlabel位置的设置方式
2021/05/21 Python
MySql分区类型及创建分区的方法
2022/04/13 MySQL
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers