分享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 eval和JSON之间的联系
Dec 31 Javascript
jQueryUI的Dialog的简单封装
Jun 07 Javascript
网页防止tab键的使用快速解决方法
Nov 07 Javascript
字段太多jquey快速清空表单内容方法
Aug 21 Javascript
jQuery表单域选择器用法分析
Feb 10 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
JS JSOP跨域请求实例详解
Jul 04 Javascript
微信小程序使用navigateTo数据传递的实例
Sep 26 Javascript
微信小程序webview 脚手架使用详解
Jul 22 Javascript
JS 自执行函数原理及用法
Aug 05 Javascript
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
PHP概述.
2006/10/09 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python实现简单图片物体标注工具
2019/03/18 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
软件配置管理有什么好处
2015/04/15 面试题
大学生军训广播稿
2014/01/24 职场文书
相亲大会策划方案
2014/06/05 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers