分享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 相关文章推荐
jquery tab插件精简版分享
Sep 10 Javascript
什么是json和jsonp,jQuery json实例详详细说明
Dec 11 Javascript
jquery及原生js获取select下拉框选中的值示例
Oct 25 Javascript
javascript实现计时器的简单方法
Feb 21 Javascript
js实现select选择框效果及美化
Aug 19 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
Oct 25 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
js实现鼠标拖动功能
Mar 20 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
May 02 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
Vue使用zTree插件封装树组件操作示例
Apr 25 Javascript
JsonServer安装及启动过程图解
Feb 28 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
php内存缓存实现方法
2015/01/24 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP闭包函数详解
2016/02/13 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
python实现简易内存监控
2018/06/21 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
python 实现图片裁剪小工具
2021/02/02 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
团支书的期末学习总结自我评价
2013/11/01 职场文书
国际贸易个人求职信范文
2014/01/04 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
导游词之西安骊山
2019/12/20 职场文书
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL
Redis数据同步之redis shake的实现方法
2022/04/21 Redis
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS