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 相关文章推荐
javascript中的几个运算符
Jun 29 Javascript
JS获取后台Cookies值的小例子
Mar 04 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
JS简单实现元素复制示例附图
Nov 19 Javascript
jQuery实现div拖拽效果实例分析
Feb 20 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
浅谈Vue内置component组件的应用场景
Mar 27 Javascript
jQuery中的类名选择器(.class)用法简单示例
May 14 jQuery
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
Dec 30 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
Sep 19 Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 Javascript
vue 弹出遮罩层样式实例
Jul 22 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
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python Web版语音合成实例详解
2019/07/16 Python
python实现密码强度校验
2020/03/18 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
办理护照介绍信
2014/01/16 职场文书
幼儿教师研修感言
2014/02/12 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android