分享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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
js完美的div拖拽实例代码
Jan 22 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
基于jQuery实现仿微博发布框字数提示
Jul 27 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
Mar 25 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
Sep 16 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
jQuery实现轮播图效果
Nov 26 jQuery
详解Vue Cli浏览器兼容性实践
Jun 08 Javascript
JS+css3实现幻灯片轮播图
Aug 14 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
JS 网站性能优化笔记
2011/05/24 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
javascript 清除输入框中的数据
2009/04/13 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
python中readline判断文件读取结束的方法
2014/11/08 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
利用aardio给python编写图形界面
2017/08/21 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
python中字符串的编码与解码详析
2020/12/03 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
后备干部考察材料
2014/02/12 职场文书
结婚保证书范文
2014/04/29 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang