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 相关文章推荐
Mootools 1.2教程(3) 数组使用简介
Sep 14 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
Mar 25 Javascript
详解javascript中的事件处理
Nov 06 Javascript
Node.js插件安装图文教程
May 06 Javascript
深入理解js中this的用法
May 28 Javascript
JS重载实现方法分析
Dec 16 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 Javascript
js实现悬浮窗效果(支持拖动)
Mar 09 Javascript
Vue filters过滤器的使用方法
Jul 14 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
Aug 15 jQuery
你或许不知道的一些npm实用技巧
Jul 04 Javascript
vue项目中锚点定位替代方式
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统计当前在线用户数实例讲解
2015/10/21 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
javascript 获取图片颜色
2009/04/05 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
Vue核心概念Action的总结
2019/01/18 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
详解Python3中ceil()函数用法
2019/02/19 Python
python pycharm的安装及其使用
2019/10/11 Python
Python3常用内置方法代码实例
2019/11/18 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
促销活动方案模板
2014/02/24 职场文书
家长寄语大全
2014/04/02 职场文书
现场活动策划方案
2014/08/22 职场文书
悬空寺导游词
2015/02/05 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书