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 相关文章推荐
AngularJS基础 ng-paste 指令简单示例
Aug 02 Javascript
JS常用知识点整理
Jan 21 Javascript
jQuery层级选择器实例代码
Feb 06 Javascript
angularjs的select使用及默认选中设置
Apr 08 Javascript
分享19个JavaScript 有用的简写写法
Jul 07 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 Javascript
react中使用swiper的具体方法
May 15 Javascript
AngularJS中的作用域实例分析
May 16 Javascript
Vue EventBus自定义组件事件传递
Jun 25 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 17 Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 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 XML备份Mysql数据库
2009/05/27 PHP
PHP运行时强制显示出错信息的代码
2011/04/20 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
django model object序列化实例
2020/03/13 Python
基于python实现matlab filter函数过程详解
2020/06/08 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
乐观大学生的自我评价
2014/01/10 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
小学见习报告
2015/06/23 职场文书
广播体操比赛主持词
2015/06/29 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技