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 相关文章推荐
Ajax执行顺序流程及回调问题分析
Dec 10 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
Sep 29 Javascript
javascript监听鼠标滚轮事件浅析
Jun 05 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
Sep 04 Javascript
JS日期格式化之javascript Date format
Oct 01 Javascript
JavaScript中的时间处理小结
Feb 24 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
js实现精确到毫秒的倒计时效果
Aug 05 Javascript
微信小程序自定义组件
Aug 16 Javascript
jsTree事件和交互以及插件plugins详解
Aug 29 Javascript
微信小程序工具函数封装
Oct 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
PHP生成随机密码类分享
2014/06/25 PHP
php框架知识点的整理和补充
2021/03/01 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
如何使用angularJs
2017/05/08 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
Python实现文件复制删除
2016/04/19 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python实现数据分析与建模
2019/07/11 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
教师实习自我鉴定
2013/12/18 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
球队口号
2014/06/18 职场文书
毕业欢送会致辞
2015/07/29 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python