【笔记】 《js权威指南》- 第17章 事件处理 17.7 - 17.8
来源:互联网 发布:傲剑神照经升级数据 编辑:程序博客网 时间:2024/06/17 14:48
1.拖放事件:
(1). 任何有draggable属性的元素都是拖放源;
(2). 当用户在该元素上拖动时触发dragstart事件;
(3). 在dragstart事件的处理程序中可以调用:
a. dataTransfer.setData() 指定拖放数据;HTML5: dataTransfer.items.add()
b. dataTransfer.effectAllowed指定传输操作,可以包括移动、复制和链接
c.dataTransfer.setDragImage()和addElement(不全支持)指定拖动时的视觉效果。
(4). 在拖动过程中,会触发拖动事件,可以在拖动中改变数据或者更新拖动图片。
(5). 在放置元素时触发dragend事件,如果拖放源支持移动操作,他会检查dataTransfer.dropEffect是否实际执行了移动操作,如果执行了,数据就会被传输,应该从拖放源中删除它。
一个简单的拖放源例子:
var clock = document.getElementById("clock");var icon = new Image();icon.src = "clock.jpg";clock.draggable = true;clock.ondragstart = function(event) {var event = event || window.event;var dt = event.dataTransfer;dt.setData("Text", new Date() + "\n");if (dt.setDragImage)dt.setDragImage(icon, 0, 0);};(6). 当拖放对象进入文档元素时,浏览器在该元素上触发dragenter事件,
(7). 拖放目标使用dataTransfer.types检验拖放对象的数据;使用dt.effectAllowed检验拖放操作的类型。
(8). 拖放目标表示对拖放对象的放置感兴趣:取消dragenter事件;
(9). 收到dragover事件,如果继续对放置感兴趣:取消dragover事件;
(10). 如果拖放对象离开拖放目标(该目标已经取消过enter和over事件),拖放目标收到dragleave事件;
(11). 如果在拖放目标上释放拖放对象,触发drop事件,使用dt.getData()获取设置的数据,如果拖放的是一个或多个文件,可以通过dt.files获取File类数组。在html5中可以通过dt.items访问文件和非文件的数据;
var lists = document.getElementsByTagName("ul");var regexp = /\bdnd\b/;for (var i = 0; i < lists.length; i++) {if (regexp.test(lists[i].className)) dnd(lists[i]);}function dnd(list) {var original_class = list.className;var entered = 0;list.ondragenter = function(e) {e = e || window.event;var from = e.relatedTarget;entered++;if ((from && !ischild(from, list)) || entered == 1) {var dt = e.dataTransfer;var types = dt.types;if (!types || //IE(types.contains && types.contains("text/plain")) || //HTML5(types.indexOf && types.indexOf("text/plain") != -1))//Webkit {list.className = original_class + " droppable";//取消事件表示对拖曳感兴趣return false;}return;}//不是第一次进入return false;};list.ondragover = function(e) {return false;};list.ondragleave = function(e) {e = e || window.event;var to = e.relatedTarget;entered--;if ((to && !ischild(to, list)) || entered <= 0) {list.className = original_class;entered = 0;}return false;};list.ondrop = function(e) {e = e || window.event;var dt = e.dataTransfer;var text = dt.getData("Text");if (text) {var item = document.createElement("li");item.draggable = true;item.appendChild(document.createTextNode(text));list.appendChild(item);list.className = original_class;entered = 0;return false;}};var items = list.getElementsByTagName("li");for(var i = 0; i < items.length; i++)items[i].draggable = true;list.ondragstart = function(e) {var e = e || window.event;var target = e.target || e.srcElement;if (target.tagName != "LI") return false;var dt = e.dataTransfer;dt.setData("Text", target.innerText || target.textContent);dt.effectAllowed = "copyMove";};list.ondragend = function(e) {e = e || window.event;var target = e.target || e.srcElement;if (e.dataTransfer.dropEffect ==="move")target.parentNode.removeChild(target);};function ischild(a, b) {for(; a; a = a.parentNode) if (a === b) return true;return false;}};
2.文本事件:
处理文本输入例子:
if (elt.addEventListener) { elt.addEventListener("keypress", func, false); elt.addEventListener("textInput", func, false); elt.addEventListener("textinput", func, false);}else { elt.attachEvent("onkeypress", filter);}function func(event) { var e = event || window.event; var target = e.target || e.srcElement; if (e.type === "textinput" || e.type === "textInput") text = e.data; else { var code = e.charCode || e.keyCode; if (code < 32 || e.charCode == 0 || e.ctrlKey || e.altKey) return; var text = String.fromCharCode(code); }}
处理文本插入例子:
function forceToUpperCase(element) {if (typeof element === "string") element = document.getElementById(element);element.oninput = upcase; //非IEelement.onpropertychange = upcaseOnpropertyChange; //IEfunction upcase(event) {this.value = this.value.toUpperCase();};function upcaseOnPropertyChange(event) {var e = event || window.event;if (e.propertyName === "value") {this.onpropertychange = null;this.value = this.value.toUpperCase();this.onpropertychange = upcaseOnPropertyChange;}};}
- 【笔记】 《js权威指南》- 第17章 事件处理 17.7 - 17.8
- 【笔记】 《js权威指南》- 第17章 事件处理 - 17.2 - 17.3
- 【笔记】 《js权威指南》- 第17章 事件处理 - 17.4 - 17.6
- JavaScript权威指南_160_第17章_事件处理_17.1-事件类型-DOM事件
- JavaScript权威指南_161_第17章_事件处理_17.1-事件类型-HTML5事件
- JavaScript权威指南_158_第17章_事件处理_17.1-事件类型-概述
- JavaScript权威指南_170_第17章_事件处理_17.4-文档加载事件
- JavaScript权威指南_171_第17章_事件处理_17.5-鼠标事件
- JavaScript权威指南_172_第17章_事件处理_17.6-鼠标滚轮事件
- JavaScript权威指南_173_第17章_事件处理_17.7-拖放事件
- JavaScript权威指南_174_第17章_事件处理_17.8-文本事件
- JavaScript权威指南_175_第17章_事件处理_17.9-键盘事件
- JavaScript权威指南_169_第17章_事件处理_17.3-调用事件处理程序-事件传播、事件取消
- 【笔记】 《js权威指南》- 第13章 浏览器中的JS
- JavaScript权威指南_157_第17章_事件处理_17.0-概述
- 【笔记】 《js权威指南》- 第5章 语句
- 【笔记】 《js权威指南》- 第6章 对象
- 【笔记】 《js权威指南》- 第7章 数组
- ASCII、Unicode、GBK和UTF-8
- 【Android】如何快速构建Android Demo
- 二维数组作为形参的参数传递问题
- 【Android】如何实现ButterKnife
- 用jQuery前,先看看jQuery库文件件导入没!
- 【笔记】 《js权威指南》- 第17章 事件处理 17.7 - 17.8
- Android APK瘦身之Android Studio Lint (代码审查)
- jQuery使用简单示例 validate 插件
- Machine Learning第八周笔记:K-Means和降维
- 探索Java interface和abstract类的秘密
- 【HDU 1165】【水题】Eddy's research II
- 蓝桥杯第四题,就是快排,学习懂了应该很简单
- ASCII,GB2312,UNICODE,UTF-8总结
- Struts2返回JSON数据的具体应用范例