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 相关文章推荐
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
Jan 06 Javascript
js判断生效时间不得大于失效时间的思路及代码
Apr 23 Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
Node.js实用代码段之正确拼接Buffer
Mar 17 Javascript
Boostrap入门准备之border box
May 09 Javascript
Javascript中判断一个值是否为undefined的方法详解
Sep 28 Javascript
微信小程序页面开发注意事项整理
May 18 Javascript
JavaScript设计模式之构造函数模式实例教程
Jul 02 Javascript
layui写后台表格思路和赋值用法详解
Nov 14 Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 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获取Google AJAX Search API 数据的代码
2010/03/12 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
改变隐藏的input中value值的方法
2014/03/19 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
python 排列组合之itertools
2013/03/20 Python
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
爱情保证书范文
2014/02/01 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
委托协议书范本
2014/04/22 职场文书
企业文化演讲稿
2014/05/20 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
Python图片检索之以图搜图
2021/05/31 Python
如何使用pdb进行Python调试
2021/06/30 Python