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 相关文章推荐
jQuery使用手册之 事件处理
Mar 24 Javascript
jquery 实现返回顶部功能
Nov 17 Javascript
jquery对复选框(checkbox)的操作汇总
Jan 13 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
详谈JS中实现种子随机数及作用
Jul 19 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 jQuery
[jQuery] 事件和动画详解
Mar 05 jQuery
Angular实现svg和png图片下载实现
May 05 Javascript
vue 路由守卫(导航守卫)及其具体使用
Feb 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
XML的代替者----JSON
2007/07/21 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
学习Vue组件实例
2018/04/28 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python查找相似单词的方法
2015/03/05 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
Python之修改图片像素值的方法
2019/07/03 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Python中logger日志模块详解
2020/08/04 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
乡镇计划生育工作汇报
2014/10/28 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
2016继续教育研修日志
2015/11/13 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers