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 相关文章推荐
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
Apr 24 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
Jul 31 Javascript
javascript获取鼠标点击元素对象(示例代码)
Dec 20 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
基于jquery animate操作css样式属性小结
Nov 27 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 Javascript
Angularjs 实现一个幻灯片示例代码
Sep 08 Javascript
JS将unicode码转中文方法
May 08 Javascript
详解AngularJS controller调用factory
May 19 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
Apr 17 jQuery
Vue分页插件的前后端配置与使用
Oct 09 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
Python多项式回归的实现方法
2019/03/11 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
自荐书封面下载
2013/11/29 职场文书
设备管理实施方案
2014/05/31 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
教师节横幅标语
2014/10/08 职场文书
董事长岗位职责
2015/02/13 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书