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 相关文章推荐
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
jquery 延迟执行实例介绍
Aug 20 Javascript
JS实现拖动示例代码
Nov 01 Javascript
javascript正则匹配汉字、数字、字母、下划线
Apr 10 Javascript
Node.js安装教程和NPM包管理器使用详解
Aug 16 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 Javascript
javascript实现日期按月份加减
May 15 Javascript
仿百度换肤功能的简单实例代码
Jul 11 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
Nov 21 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 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新手上路(十三)
2006/10/09 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python快速排序算法实例分析
2017/11/29 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
美术专业学生个人自我评价
2013/09/19 职场文书
大学生就业自我鉴定
2013/10/26 职场文书
名人演讲稿范文
2013/12/28 职场文书
法人授权委托书范本
2014/04/04 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
三好学生竞选稿
2015/11/21 职场文书
MYSQL 运算符总结
2021/11/11 MySQL