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 相关文章推荐
cloudgamer出品ImageZoom 图片放大效果
Apr 01 Javascript
原生javascript获取元素样式属性值的方法
Dec 25 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
Mar 19 Javascript
jQuery ajax分页插件实例代码
Jan 27 Javascript
详解JavaScript数组和字符串中去除重复值的方法
Mar 07 Javascript
jquery实现全选功能效果的实现代码
May 05 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
Jul 14 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
详解javascript对数组和json数组的操作
Apr 15 Javascript
详解关于React-Router4.0跳转不置顶解决方案
May 10 Javascript
vue实现路由切换改变title功能
May 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连接Oracle for NT 远程数据库
2006/10/09 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python实现的爬虫功能代码
2017/06/24 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
python自动化生成IOS的图标
2018/11/13 Python
python采集微信公众号文章
2018/12/20 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
应聘教师自荐信
2013/10/12 职场文书
上学迟到的检讨书
2014/01/11 职场文书
置业顾问岗位职责
2014/03/02 职场文书
大学军训感言300字
2014/03/09 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
二年级学生期末评语
2014/12/26 职场文书
运动会1000米加油稿
2015/07/21 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
高一作文之乐趣
2019/11/21 职场文书
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript