分享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 相关文章推荐
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
jQuery实现页面滚动时动态加载内容的方法
Mar 20 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
jquery实现文本框的禁用和启用
Dec 07 Javascript
javascript 数组去重复(在线去重工具)
Dec 17 Javascript
JQuery获取鼠标进入和离开容器的方向
Dec 29 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
mockjs,json-server一起搭建前端通用的数据模拟框架教程
Dec 18 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
layui radio单选限制下一个radio单选的实例
Sep 03 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
php中rename函数用法分析
2014/11/15 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
HTML颜色选择器实现代码
2010/11/23 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python中字典映射类型的学习教程
2015/08/20 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Django实现表单验证
2018/09/08 Python
Django 多环境配置详解
2019/05/14 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
人力资源管理毕业求职信
2014/08/05 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
出国导师推荐信
2015/03/25 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
Python利用FlashText算法实现替换字符串
2022/03/31 Python