1.1     监听onpaste事件

1.1.1 定义和用法

npaste 事件在用户向元素中粘贴文本时触发。

注意: 虽然使用的 HTML 元素都支持 onpaste 事件,但实际上并非支持所有元素,例如 <p> 元素, 除非设置了 contenteditable 为 "true" (查看下文的更多实例)。

提示: onpaste 事件通常用于 type="text" 的 <input> 元素。

提示: 有三种方式可以在元素中粘贴内容:

1》按下 CTRL + V

2》从浏览器的编辑菜单中选择 "Paste(粘贴)"

3》右击鼠标按钮在上下文菜单中选择 "Paste(粘贴)" 命令。

1.1.2 语法

HTML 中:

<element onpaste="myScript">

JavaScript 中:

object.onpaste=function(){myScript};

JavaScript 中, 使用 addEventListener() 方法:

object.addEventListener("paste", myScript);

注意: Internet Explorer 8 及更早 IE 版本不支持 addEventListener() 方法。

当向 <p> 元素上粘贴文本内容时执行 JavaScript (注意 contenteditable 设置为 "true"):

<p contenteditable="true" onpaste="myFunction()">尝试在段落中粘贴内容。</p>

1.1.3 event.clipboardData

通过事件回调中的event参数,获取剪贴板数据event.clipboardData(不是所有的浏览器都支持)

// '/image/.test(event.clipboardData.types)' // 检查是否为图片
// 获取图片二进制数据(似乎浏览器的实现都会有大小差异)
Array.each(event.clipboardData.items, function(item){
if (/image/.test(item.type)) {
var blob = item.getAsFile();
var URL = window.URL || window.webkitURL;
var source = URL.createObjectURL(blob);
console.log(source) 
}
});

通过Ajax将数据发送到后端服务器,后端将图片存储起来后,返回一个图片可访问地址

访问这个地址就可以看到图片了

1.2     使用样例

1》绑定单个元素事件

window.addEvent("paste",function(e){ });

<html>
<head>
<title>test chrome paste image</title>
<style>
DIV#editable {
width: 400px;
height: 300px;
border: 1px dashed blue;
}
</style>
<script type="text/javascript"> window.onload=function() {
function paste_img(e) {
debugger;
if ( e.clipboardData.items ) {
// google-chrome
alert('support clipboardData.items(chrome ...)');
ele = e.clipboardData.items
for (var i = 0; i < ele.length; ++i) {
if ( ele[i].kind == 'file' && ele[i].type.indexOf('image/') !== -1 ) {
var blob = ele[i].getAsFile();
window.URL = window.URL || window.webkitURL;
var blobUrl = window.URL.createObjectURL(blob);
console.log(blobUrl); var new_img= document.createElement('img');
new_img.setAttribute('src', blobUrl);
var new_img_intro = document.createElement('p');
new_img_intro.innerHTML = 'the pasted img url(open it in new tab): <br /><a target="_blank" href="' + blobUrl + '">' + blobUrl + '</a>'; document.getElementById('editable').appendChild(new_img);
document.getElementById('editable').appendChild(new_img_intro);
} }
} else {
alert('non-chrome');
}
}
document.getElementById('editable').onpaste=function(){paste_img(event);return false;};
} </script>
</head>
<body >
<h2>test image paste in browser</h2>
<div id="non-editable" >
<p>copy the following img, then paste it into the area below</p>
<img src="./128.png" />
</div>
<div id="editable" contenteditable="true" >
<p>this is an editable div area</p>
<p>paste the image into here.</p>
</div>
</body>
</html>

2》遍历循环所有的事件

最新文章

  1. Oracle碎碎念~2
  2. unity3d 关于断点下载和整个下载(用于更新)
  3. SpringMVC控制器与视图的数据交换
  4. 20. Candy &amp;&amp; Gas Station
  5. 如何做好一位资深的web前端工程师
  6. 在双系统( Win7 + Ubuntu )环境下正常删除Ubuntu
  7. xunsearch迅搜体验
  8. 层叠上下文 Stacking Context
  9. 将list&lt;对象&gt;转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
  10. LCS算法思想
  11. TMG 2010 VPN配置
  12. OOP in JS - Inheritance
  13. 五.RabbitMQ之路由(Routing)和主题(topics)
  14. 【原创】大数据基础之HDFS(2)HDFS副本数量检查及复制逻辑
  15. Django数据查询方法总结
  16. 卷积中的full、same、valid
  17. html5 viewport使用
  18. [多线程]wait和notify
  19. java 递归 树形
  20. DIV+CSS IE6/IE7/IE8/FF兼容问题汇总

热门文章

  1. opencv学习笔记(七)---图像金字塔
  2. Linux的vim和vi编辑器
  3. SQL SERVER中的二种获得自增长ID的方法
  4. Schema Workbench 启动慢
  5. java8特性之Lambda表达式
  6. ZOJ - 2112 主席树套树状数组
  7. Codeforces - tag::data structures 大合集 [占坑 25 / 0x3f3f3f3f]
  8. dotnetCore增加MiddleWare的Run,Use Map MapThen四个扩展方法
  9. Vector bit-select and part-select addressing verilog片选写法
  10. c#静态扩展方法,字典的克隆扩展方法