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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
Dec 26 Javascript
js过滤HTML标签以及空格的思路及代码
May 24 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
JavaScript函数的调用以及参数传递
Oct 21 Javascript
学习JavaScript设计模式(接口)
Nov 26 Javascript
AngularJS通过$http和服务器通信详解
Sep 21 Javascript
vue2 前端搜索实现示例
Feb 26 Javascript
Vue实现按钮旋转和移动位置的实例代码
Aug 09 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 Javascript
Vue根据条件添加click事件的方式
Nov 09 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程序中的常见漏洞进行攻击
2006/10/09 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
php生成随机颜色的方法
2014/11/13 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
理解Python中函数的参数
2015/04/27 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
在求职信中如何凸显个人优势
2013/10/30 职场文书
高中自我评价范文
2014/01/27 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
技术比武方案
2014/05/19 职场文书
亮剑观后感
2015/06/05 职场文书
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS