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 相关文章推荐
JS中confirm,alert,prompt函数区别分析
Jan 17 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
Apr 12 Javascript
jquery+css+ul模拟列表菜单具体实现思路
Apr 15 Javascript
jQuery对下拉框,单选框,多选框的操作
Feb 21 Javascript
深入剖析JavaScript中的枚举功能
Mar 06 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
jquery心形点赞关注效果的简单实现
Nov 14 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
Vue.js的动态组件模板的实现
Nov 26 Javascript
vue实现的下拉框功能示例
Jan 29 Javascript
vue语法自动转typescript(解放双手)
Sep 18 Javascript
jQuery实现聊天对话框
Feb 08 jQuery
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
xml+php动态载入与分页
2006/10/09 PHP
Windows下的PHP5.0详解
2006/11/18 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
了解一点js的Eval函数
2012/07/26 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
pygame实现飞机大战
2020/03/11 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
计算机操作自荐信
2013/12/07 职场文书
六个一活动实施方案
2014/03/21 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
班级学习计划书
2014/04/27 职场文书
警示教育活动总结
2014/05/05 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
暑期培训班招生方案
2014/08/26 职场文书
销售会议开幕词
2015/01/28 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android
vue特效之翻牌动画
2022/04/20 Vue.js