突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
拖拽(Drag/Drop)是个非常普遍的功能。你可以抓住一个对象,并且拖动到你想放置的区域。很多javascript都类似实现了相关的功能,例如,jQueryUI的draganddrop组件。在HTML5中,拖拽(draganddrop)成为了标准操作,任何元素都支持。正因为这个功能太普遍了,所有的主流浏览器都支持这个操作。 启用拖拽-draggable属性 非常简单,只需要将一个元素的拖动属性修改为draggable,这个元素就支持拖动了,如下所示: 复制代码 代码如下: 拖动中数据的传递 拖动的过程中,我们往往需要传递相应的逻辑数据来完成转换的过程,这里主要是使用dataTransfer对象进行数据传递,下面先看看它的成员: 方法成员: 复制代码 代码如下: format:一个String型参数,指定被拖动数据的类型。该参数取值可以是“Text”(文本类型)和“URL”(URL类型)。该参数是大小写无关的,所以传入"text"与"Text"是一样的。 data:一个变体类型参数,指定被拖动的数据。该数据可以是文本,图片路径,URL等等。 该函数有Boolean类型的返回值,true表示数据成功加到dataTransfer中,false代表不成功。如果需要,可以通过这个参数来决定是否应该继续执行某些逻辑。 复制代码 代码如下: format意义与setData中的一样,取值可以是"Text"(文本类型)和"URL"(URL类型)。 复制代码 代码如下: 这里的format除了上面可以指定的"Text"(文本类型)和"URL"(URL类型)外,还可以取下列值:file-文件,html-html元素,image-图片。 这个方法可以用于去选择性的处理拖动的数据类型。 属性成员: 复制代码 代码如下: 属性类型为字符串,取值范围如下: "copy"-复制数据. "link"-链接数据. "move"-移动数据 "copyLink"-复制或链接数据,由目标对象来确定。 "copyMove"-复制或移动数据,由目标对象来确定。 "linkMove"-链接或移动数据,由目标对象来确定。 "all"-所有的操作都是支持的。 "none"-禁止拖动。 "uninitialized"-默认值,采用默认的行为。 注意设置effectAllowed为none以后,拖动是禁止的,但是鼠标形状还是显示没有可拖动的对象的形状,如果想不显示这个鼠标形状,则需要将window的event事件的属性returnValue设置为false。 复制代码 代码如下: 属性类型为字符串,取值范围如下: "copy"-鼠标显示为复制时的形状; "link"-鼠标显示为连接的形状; "move"-鼠标显示为移动的形状。 "none"(默认值)-鼠标显示为没有拖动的形状。 effectAllowed指定了数据源支持的操作,所以通常在ondragstart事件中指定。dropEffect指定了拖动放置的目标支持的操作,所以与effectAllowed配合,通常在拖动的目标上的ondragenter,ondragover和ondrop等事件中使用。 复制代码 代码如下: dataTransfer对象的存在,使得在拖动的数据源和目标元素之间传递逻辑数据变成了可能。通常我们使用setData方法在数据源元素的ondragstart事件中提供数据,然后再目标元素中,使用getData方法获取数据。 拖动中触发的事件 下面是一次拖拽会发生的事件,基本上事件的触发顺序也就是下面的顺序: 复制代码 代码如下: 基本上事件的参数event都会传入相关的元素,可以很方便的进行一些修改。这里,我们并不需要处理每个事件,通常只需要挂接主要的几个事件即可。 拖动开始-ondragstart事件 从这个事件传入的参数含有的信息非常丰富,从中可以很方便的获取到被拖动的元素(event.Target);从中可以设置被拖动数据(event.dataTransfer.setData);所以你可以很方便实现拖动的背后逻辑(当然你绑定的时候也可以传递其他的参数)。 拖动过程中-ondrag,ondragover,ondragenter和ondragleave事件 ondrag事件的对象是被拖拽元素,通常这个事件处理的比较少。ondragenter事件是当拖动进入当前元素时发生,ondragleave事件是在当拖动离开当前元素时发生,ondragover事件是在拖动在当前元素中移动时发生。 这里只需要注意一点,因为默认情况下,浏览器是禁止元素drop的,所以为了让元素可以drop,需要在这个函数中返回false或者调用event.preventDefault()方法。如下面的例子所示。 拖动结束-ondrop,ondragend事件 当可拖动的数据被drop的时候,drop事件触发。drop结束后,dragend事件被触发,这个事件使用的也相对少一点。 看一个简单的例子: 复制代码 代码如下:(编辑:焦作站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |