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 相关文章推荐
extjs表格文本启用选择复制功能具体实现
Oct 11 Javascript
js中的replace方法使用介绍
Oct 28 Javascript
js读取被点击次数的简单实例(从数据库中读取)
Mar 07 Javascript
JSON.parse()和JSON.stringify()使用介绍
Jun 20 Javascript
jquery制作漂亮的弹出层提示消息特效
Dec 23 Javascript
JavaScript中定义类的方式详解
Jan 07 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
Aug 20 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
Nov 28 Javascript
vue2.0 常用的 UI 库实例讲解
Dec 12 Javascript
javascript导出csv文件(excel)的方法示例
Aug 25 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 xml 入门学习资料
2011/01/01 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
接收键盘指令的脚本
2006/06/26 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
Python中super关键字用法实例分析
2015/05/28 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
JBL英国官网:JBL UK
2018/07/04 全球购物
自荐信格式
2013/12/01 职场文书
《大海那边》教学反思
2014/04/09 职场文书
禁毒宣传标语
2014/06/19 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
个人先进材料范文
2014/12/30 职场文书