分享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 相关文章推荐
js textarea自动增高并隐藏滚动条
Dec 16 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
jquery插件制作 手风琴Panel效果实现
Aug 17 Javascript
jQuery循环滚动新闻列表示例代码
Jun 17 Javascript
JQuery实现展开关闭层的方法
Feb 17 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
Sep 27 Javascript
JS错误处理与调试操作实例分析
Apr 13 Javascript
微信小程序实现简单购物车功能
Dec 30 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
九年级家长会邀请函
2014/01/15 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
新年祝酒词大全
2015/08/11 职场文书