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学习2 选择器的使用说明
Feb 07 Javascript
JavaScript获取FCK编辑器信息的具体方法
Jul 12 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
JS实现可调整倒计时间代码分享
Aug 18 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
layui表格checkbox选择全选样式及功能的实例
Mar 07 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
让axios发送表单请求形式的键值对post数据的实例
Aug 11 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 03 Javascript
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 Javascript
给原生html中添加水印遮罩层的实现示例
Apr 02 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
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
脚本收藏iframe
2006/07/21 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python切片索引用法示例
2018/05/15 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
python async with和async for的使用
2019/06/20 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
shell程序中如何注释
2012/01/28 面试题
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
园艺师求职信
2014/04/27 职场文书
文艺演出策划方案
2014/06/07 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
医院护士工作检讨书
2014/10/26 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
详解Python flask的前后端交互
2022/03/31 Python