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的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
jQuery实现下拉框功能实例代码
May 06 Javascript
jquery表单插件Autotab使用方法详解
Jun 24 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
Sep 27 Javascript
微信小程序 特效菜单抽屉效果实例代码
Jan 11 Javascript
js仿微博动态栏功能
Feb 22 Javascript
JS中自定义事件的使用与触发操作实例分析
Nov 01 Javascript
vue(2.x,3.0)配置跨域代理
Nov 27 Javascript
Javascript类型判断相关例题及解析
Aug 26 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的curl开启问题探讨
2014/04/08 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
Form表单及django的form表单的补充
2019/07/25 Python
python中append实例用法总结
2019/07/30 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
安踏广告词改编版
2014/03/21 职场文书
单位授权委托书范本
2014/09/26 职场文书
放假通知
2015/04/14 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS