javascript在网页中实现读取剪贴板粘贴截图功能


Posted in Javascript onJune 07, 2014

见某网站的输入框支持截屏粘贴的功能,觉得有点意思,于是将代码扒出来分享下。

可惜,目前仅有高版本的 Chrome 浏览器支持这样直接粘贴,其他浏览器目前为止还无法粘贴( IE11没测试过 ),当然这种增强型的用户体验功能有总比没有好。

输入框的结构代码:

<input type="text" id="testInput" />

为输入框绑定粘贴事件:

var input = document.getElementById( 'testInput' );
input.addEventListener( 'paste', function( event ){
    // dosomething...
});

粘贴事件的 Event 接口对象提供了一个 clipboardData 接口,该接口就保存了系统剪贴板中的数据,如上面所说,目前只有高版本的 Chrome 浏览器能直接访问系统剪贴板的数据。这就给截屏后保存到剪贴板中的图片于网页直接进行交互提供了一个入口。

这里所说的截屏,就是 QQ 提供的截屏或者系统自带的 PrtScn 键的截屏功能,或者其他第三方软件提供的截屏功能。

input.addEventListener( 'paste', function( event ){
    // 添加到事件对象中的访问系统剪贴板的接口
    var clipboardData = event.clipboardData,
        i = 0,
        items, item, types;    if( clipboardData ){
        items = clipboardData.items;
        if( !items ){
            return;
        }
        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 );
        }
    }
});

从剪贴板中取到了图片数据,就可以用 FileReader 对其进行读取了。

var imgReader = function( item ){
    var file = item.getAsFile(),
        reader = new FileReader();    // 读取文件后将其显示在网页中
    reader.onload = function( e ){
        var img = new Image();
        img.src = e.target.result;
        document.body.appendChild( img );
    };

    // 读取文件
    reader.readAsDataURL( file );
};

很短的代码就实现了,可以使用以下源码看看演示。

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>利用 clipboardData 在网页中实现截屏粘贴的功能</title>
<style type="text/css">
#box{ width:200px; height:200px; border:1px solid #ddd; }
</style>
</head>
<body>
<h1>利用 clipboardData 在网页中实现截屏粘贴的功能</h1>   
<hr />
<div><input type="text" id="testInput" placeholder="截屏后粘贴到输入框中" size="30" /></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;
            document.body.appendChild( img );
        };
        reader.readAsDataURL( blob );
    };
    document.getElementById( 'testInput' ).addEventListener( 'paste', function( e ){
    var clipboardData = e.clipboardData,
        i = 0,
        items, item, types;
    if( clipboardData ){
        items = clipboardData.items;
        if( !items ){
            return;
        }
        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 );
        }
    }
    });
})();  
</script>
</body>
</html>
Javascript 相关文章推荐
jquery获取复选框被选中的值
Apr 10 Javascript
jQuery手机拨号界面特效代码分享
Aug 27 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
Sep 25 Javascript
深入浅析Node.js 事件循环
Dec 20 Javascript
jQuery的each循环用法简单示例
Jun 12 Javascript
AngularJs Injecting Services Into Controllers详解
Sep 02 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
JavaScript 巧学巧用
May 23 Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 Javascript
详解微信小程序中组件通讯
Oct 30 Javascript
解决vue中el-tab-pane切换的问题
Jul 19 Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 #Javascript
jQuery的缓存机制浅析
Jun 07 #Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 #Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 #Javascript
判断iframe里的页面是否加载完成
Jun 06 #Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 #Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 #Javascript
You might like
随时给自己贴的图片加文字的php水印
2007/03/16 PHP
两个强悍的php 图像处理类1
2009/06/15 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
python中查看变量内存地址的方法
2015/05/05 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
介绍一下write命令
2012/09/24 面试题
售后服务经理岗位职责范本
2014/02/22 职场文书
平安校园建设方案
2014/05/02 职场文书
白血病募捐倡议书
2014/05/14 职场文书
销售人员工作自我评价
2014/09/21 职场文书
生日寿星公答谢词
2015/09/29 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
python lambda 表达式形式分析
2022/04/03 Python