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 相关文章推荐
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 Javascript
用js获取电脑信息(是使用与IE浏览器)
Jan 15 Javascript
js实现按Ctrl+Enter发送效果
Sep 18 Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 Javascript
学习JavaScript设计模式之中介者模式
Jan 14 Javascript
javascript回到顶部特效
Jul 30 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
Dec 14 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
Nov 30 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
jQuery实现图片下载代码
Jul 18 jQuery
JS实现移动端点击按钮复制文本内容
Jul 28 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 5.4 你必须要知道的
2013/08/07 PHP
php从字符串创建函数的方法
2015/03/16 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
Python列表切片操作实例总结
2019/02/19 Python
python输入多行字符串的方法总结
2019/07/02 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
wxPython色环电阻计算器
2019/11/18 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
自考生自我鉴定范文
2013/10/01 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
企业申诉管理制度
2014/01/30 职场文书
《都江堰》教学反思
2014/02/07 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
村党支部书记承诺书
2014/05/29 职场文书
职位证明模板
2015/06/23 职场文书
企业培训简报范文
2015/07/20 职场文书
课改心得体会范文
2016/01/25 职场文书
导游词之青岛崂山
2019/12/27 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
python实现层次聚类的方法
2021/11/01 Python