js剪切板应用clipboardData实例解析


Posted in Javascript onMay 29, 2016

目前仅有高版本的 Chrome 浏览器支持这样直接粘贴,其他浏览器目前为止还无法粘贴,不过火狐和ie11浏览器在可编辑的div中能够粘贴截图的图片也是base64位和Chrome利用clipboardData的效果是一样的,只是在火狐和ie11浏览器中目前还无法实现类似用clipboardData直接获取图片的base64数据,它是自带的直接进去img数据。

完整实例:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>利用clipboardData在网页中实现截屏粘贴的功能</title>
<style type="text/css">
  .box{ width:500px; height:300px; border:1px solid #ddd; }
  .box img{max-width:480px; max-height: 100%; text-align: center;}
</style>
</head>
<body>
<div class="box" contenteditable="true" id="testInput">
</div>
<script type="text/javascript">
(function(){
  var imgReader = function( item ){
    var blob = item.getAsFile(),
      reader = new FileReader();
    reader.onload = function( e ){
      var img = new Image();
      img.src = e.target.result;
      console.log(img);
      document.getElementById('testInput').appendChild( img );
    };
    reader.readAsDataURL( blob );
  };

  document.getElementById( 'testInput' ).addEventListener( 'paste', function( e ){
    //window.clipboardData.getData("Text") ie下获取黏贴的内容 e.clipboardData.getData("text/plain")火狐谷歌下获取黏贴的内容
    //alert(e.clipboardData.getData("text/plain") )
    var clipboardData = e.clipboardData,//谷歌
      i = 0,
      items, item, types;
       console.log('0')

    if( clipboardData ){
       console.log('1')
      items = clipboardData.items;
      if( !items ){
        console.log(2)
        return;
      }
      console.log(3)
      item = items[0];
      types = clipboardData.types || [];
      for( ; i < types.length; i++ ){
        if( types[i] === 'Files' ){
          item = items[i];
          break;
        }
      }
      if( item && item.kind === 'file' && item.type.match(/^image\//i) ){
        imgReader( item );
      }
     }
   },false);
})(); 
</script>


</script>

</body>
</html>

实例二:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <div id="div" style="width:100%;height:700px;border:1px solid #ccc;padding:20px" contenteditable="true"></div>
 <script>
  var div = document.getElementById('div');
  div.addEventListener('paste', function(e) {
   if(e.clipboardData) {
    for(var i = 0; i < e.clipboardData.items.length; i++) {
     var c = e.clipboardData.items[i];
     var f = c.getAsFile();
     var reader = new FileReader();
     reader.onload = function(e) {
      div.innerHTML += '<img src="' + e.target.result + '">';
     }
     reader.readAsDataURL(f);
    }
   }
  });
 </script>
</body>
</html>

实现的方法:

方法一:在Chrome浏览器中能够直接通过clipboardData获取截图的图片数据,可以用ajax将数据传给后台,然后由后台开发返回带域名的图片地址

方法二:由于在火狐等浏览器中无法直接获取图片数据,所以可以在粘贴的时候获取div中的img的数据是base64的url数据,然后同方法一用ajax

方法三:可以统一在点击发布或者保存消息时,获取div中的img的数据是base64的url数据,然后同方法一用ajax,如果有多张就循环,也或者是直接点击保存和发布的时候,后端开发做处理,返回来的显示信息中直接做处理,这样我们在div中就不需要把base64的url替换成后端返回的带域名的地址

方法四:在div中粘贴的时候弹出一个弹出层,然后弹出层中有截图的图片预览可确认上传按钮,点击上传按钮走ajax上传图片同方法一

Javascript 相关文章推荐
用js重建星际争霸
Dec 22 Javascript
学习YUI.Ext 第三天
Mar 10 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
使用js完成节点的增删改复制等的操作
Jan 02 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
Jan 14 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
React如何避免重渲染
Apr 10 Javascript
JS中的算法与数据结构之集合(Set)实例详解
Aug 20 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
js实现可控制左右方向的无缝滚动效果
May 29 #Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 #Javascript
js省市县三级联动效果实例
Apr 15 #Javascript
js实现精确到秒的倒计时效果
May 29 #Javascript
解读Bootstrap v4 sass设计
May 29 #Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
May 29 #Javascript
深入理解js数组的sort排序
May 28 #Javascript
You might like
给php新手谈谈我的学习心得
2007/02/25 PHP
php cli换行示例
2014/04/22 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
php Session无效分析资料整理
2016/11/29 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
大学生个人总结的自我评价
2013/10/05 职场文书
机械专业应届生求职信
2013/12/12 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
求职信名称怎么写
2014/05/26 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
Python实现的扫码工具居然这么好用!
2021/06/07 Python