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 相关文章推荐
锋利的jQuery 第三章章节总结的例子
Mar 23 Javascript
通过jQuery源码学习javascript(一)
Dec 27 Javascript
js时间戳格式化成日期格式的多种方法
Nov 11 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
Apr 16 Javascript
JavaScript常用验证函数实例汇总
Nov 25 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
Sep 22 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
Dec 11 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 Javascript
p5.js入门教程之平滑过渡(Easing)
Mar 16 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
对vuex中getters计算过滤操作详解
Nov 06 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基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
JS日历 推荐
2006/12/03 Javascript
javascript动画效果类封装代码
2007/08/28 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
python中format函数如何使用
2020/06/22 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
采购部部门职责
2013/12/15 职场文书
英文自荐信
2013/12/15 职场文书
新教师工作感言
2014/02/16 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
邀请函怎么写
2015/01/30 职场文书
python xlwt模块的使用解析
2021/04/13 Python
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android