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 相关文章推荐
经常用的图片在容器中的水平垂直居中实例
Jun 10 Javascript
Prototype ObjectRange对象学习
Jul 19 Javascript
为Extjs加加速(javascript加速)
Aug 19 Javascript
突发奇想的一个jquery插件
Nov 19 Javascript
ie下动态加态js文件的方法
Sep 13 Javascript
全面兼容的javascript时间格式化函数(比较实用)
May 14 Javascript
使用javascript实现监控视频播放并打印日志
Jan 05 Javascript
Javascript基础教程之数据类型 (字符串 String)
Jan 18 Javascript
React.js中常用的ES6写法总结(推荐)
May 09 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
微信小程序通过保存图片分享到朋友圈功能
May 24 Javascript
Vue.js标签页组件使用方法详解
Oct 19 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/08/08 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
js常见表单应用技巧
2008/01/09 Javascript
让Firefox支持event对象实现代码
2009/11/07 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
Python属性和内建属性实例解析
2020/01/14 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
英语求职信范文
2014/05/23 职场文书
2014年食堂工作总结
2014/11/20 职场文书
2016年元旦主持词
2015/07/06 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis