MooTools教程(12):Drag.Move来实现拖放

2016-02-20 00:40 7 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的MooTools教程(12):Drag.Move来实现拖放,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - Web开发 】

今天我们开始第十二讲,今天我们将仔细看一下Drag.Move一个很强大的MooTools类,它可以让你给你的web应用添加拖放功能。它的使用和我们见过的其他的插件类似:首先你使用new关键字来创建一个Drag.Move对象并赋值给一个变量,然后你再定义你的选项和事件。这就是全部要做的事情,不过你一定要注意一下下面的例子中描述的IE的CSS怪异现象。

基本用法

Drag.Move

创建你自己的拖动对象非常的容易。稍微看一下下面的例子就行了。注意一下我们是怎么把我们的Drag.Move对象的选项和事件从我们的Drag选项和事件中分离出来的。Drag.Move类扩展了Drag类,因此它可以接受Drag类的选项和事件。今天我们并不打算特别地讲一讲Drag类,不过我们还是要研究一下一些有用的选项和事件。看一下下面的代码,然后学习一下其中的细节。

参考代码:   myDrag =  Drag.Move(dragElement, {        droppables: dropElement,    container: dragContainer,        handle: dragHandle,                onDrop: (el, dr) {                alert(dr.get());    },            onComplete: (el) {        alert(el.get());    }});

在这里我们稍微打断一下

Drag.Move选项

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

Drag.Move选项有两个很重要的元素:

droppables设置可接纳的(droppable)元素的选择器(这个元素将会注册拖动相关的事件) container设置拖动元素的容器(可以保证元素一直在容器内)

设置这个选项非常的容易:

参考代码:   dragElement = $(); dropElements = $$();  dragContainer = $(); myDrag =  Drag.Move(dragElement , {            droppables: dropElements ,        container: dragContainer });

现在你的可接受拖动元素的元素就包含进来了,你就有了一个可以接受拖放元素的类。

Drag.Move事件

这个事件可以让你在不同的点去触发一个函数,比如当你开始拖动一个对象或者你准备放下它。每一个Drag.Move事件都将传递拖动元素和接受拖动元素的元素(我们一直叫做droppable)作为参数。

onDrop这个事件将在一个可拖动的元素放到一个接受拖动元素的元素里面时触发。 onLeave这个事件将在一个可拖动的元素离开一个接受拖动元素的元素时触发。 onEnter这这个事件将在一个可拖动的元素进入一个接受拖动元素的元素时触发。

这些事件中的每一个事件都将调用一个函数,每个函数都将在相应的事件触发时调用。

参考代码:   dragContainer = $();  myDrag =  Drag.Move(dragElement , {        droppables: dropElements ,    container: dragContainer ,                onDrop: (el, dr) {                         (!dr) {                     }                                 {                    };    },    onLeave: (el, dr) {            },    onEnter: (el, dr) {            }});

一些Drag事件和选项

对于Drag,有许多选项和事件,不过这里我们只看一小部分。

snap选项

snap选项可以让你设置用户的鼠标至少移动多少个像素后开始拖动。默认是6,你额可以设置为任何数字或者值为数字的变量。很明显,这里有一些合理的限制(比如设置snap为1000将毫无用处),但是这在定制你的用户体验时将会派上用场。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)参考代码:   myDrag =  Drag.Move(dragElement , {        snap:  });

handle选项

handle可以给你的拖动元素添加一个控制对象。这个控制对象将成为唯一的可以接受抓取(拖动)的元素,从而允许你使用其他的元素做一些其他的事情。要设置一个控制对象,只需调用这个元素就可以了。

参考代码:   dragHandle = $(); myDrag =  Drag.Move(dragElement , {        handle: dragHandle });

onStart事件

onStart和它名字一样,当开始拖动时触发这个事件。如果你设置了一个很大的snap,这个事件将不会触发直到鼠标离开元素有指定的snap值那么远。

参考代码:   myDrag =  Drag.Move(dragElement , {            onStart: (el) {            }});

onDarg事件

这个onDrag事件,将会在你拖动一个元素时连续地触发。

参考代码:   myDrag =  Drag.Move(dragElement , {            onDrag: (el) {            }});

onComplete事件

最后是onComplete事件,将在你放下一个拖动元素时触发,而不管你是不是把它放到了一个可以接受拖动元素的元素内部。

参考代码:   myDrag =  Drag.Move(dragElement , {            onComplete: (el) {            }});代码示例

让我们把刚才的这些代码以一种方式组合起来,当不同的事件触发时,我们突出显示不同的内容,并且我们使用上面我们看到的选项来配置我们的Drag.Move对象:

参考代码:  window.addEvent(, () {     dragElement = $();     dragContainer = $();     dragHandle = $();     dropElement = $$();     startEl = $();     completeEl = $();     dragIndicatorEl = $();     enterDrop = $();     leaveDrop = $();     dropDrop = $();       myDrag =  Drag.Move(dragElement, {        droppables: dropElement,    container: dragContainer,        handle: dragHandle,        onDrop: (el, dr) {         (!dr) { }          {            dropDrop.highlight();             el.highlight();             dr.highlight();         };    },    onLeave: (el, dr) {        leaveDrop.highlight();     },    onEnter: (el, dr) {        enterDrop.highlight();     },        onStart: (el) {        startEl.highlight();     },    onDrag: (el) {        dragIndicatorEl.highlight();     },    onComplete: (el) {        completeEl.highlight();     }    });});

注意一下CSS:在IE中,为了能够适合地注册Drag.Move的容器,你需要在下面的CSS中明确地指出它的位置。最重要的一点是你需要记住设置容器的位置为position: relative,而设置可拖动的元素的位置为position: absolute,然后一定要设置可拖动元素的left和top属性。现在,如果你正在为其他浏览器构建并且遵循此规则,你可以忽略这一部分:

参考代码:  body {    :     : } #drag_me {    :     :     : #    :     :     : }  #drop_here {    :     :     : #eee} #drag_cont {    : #ccc      :      :     :     :     : }  #drag_me_handle {    : %    :     : #} #drag_me_handle span {    :     : }  .indicator {    : %    :     : #    :   #eee} .indicator span {    :     : } .draggable {    :     :     : blue}

现在我们再建立我们的HTML:

参考代码:  div id=    div id= class=span拖动开始/span/div    div id= class=span拖动中/span/div    div id= class=span拖动结束/span/div    div id= class=span进入了Droppable元素/span/div    div id= class=span离开了Droppable元素/span/div    div id= class=span放进了Droppable元素/span/div    div id=    div id=span控制对象/span/div    /div     div id= class= /div/div

拖动开始拖动中拖动结束进入了Droppable元素离开了Droppable元素放进了Droppable元素控制对象 

 

更多学习

这里是文档中一些相关的章节:

包含MooTools 1.2核心库、MooTools 1.2扩展库,一个包含你的函数的外部JavaScript文件,一个定义你的样式的外部CSS文件,一个简单的HTML文件和上面的例子。

来源:https://www.tulaoshi.com/n/20160220/1632374.html

延伸阅读
标签: Web开发
今天我们开始第五讲,在上一讲()中,我们学习了在MooTools 1.2中建立和使用函数的几种不同方式。下一步就是理解事件了。和选择器类似,事件也是建立互动界面的一个重要部分。一旦你掌握了一个元素,你需要去决定什么行为来触发什么效果。先把效果留着以后在讲,我们首先看一看中间步骤和一些常见的事件。 左键单击事件 左键单击事件是web...
标签: Web开发
今天我们来看看MooTools是怎样使得过滤用户输入变得非常轻松。我们今天将讲一些基本的数字过滤,明天再更深入地讲讲字符串过滤。 注意 :JavaScript中的输入过滤只是为了保证(客户端)代码顺利执行,并 不能 替代服务器端的字符串过滤来保护你的应用程序不被注入攻击。 在第四讲的最后的一个例子中,我们从文本输入框获取RGB值,然后使...
标签: Web开发
今天萌发一个想法,用css来实现透视效果。起初,我想到的是我们常见的添加阴影效果的方法,用多个div通过偏移来实现,但这需要很多 div,不够理想。随后,我想到css的一个属性:border,在border相连接处可以产生对角线效果。这样用两个div就可以实现,我们先看看,然后再分析实现过程。 首先,我们看看border如何生成的对角线效果,在你的...
标签: Android
安卓手机move to ios使用教程   move to ios使用教程: iOS的一切都尽力设计为简单化。这也包含了转移到使用iOS方面。只需几步TuLaoShi.com,你便可以将你的内容自动并安全的从你的安卓设备上移动。不再需要保存你的所有内容并手动移动,因为转移到 iOS将会为你移动下列内容: 联系人、信息历史、相机照片和视频、网...
标签: Web开发
到现在为止,初始化这些MooTools插件对象就会开始变得越来越熟悉。滚动条(Slider)没有任何不同,你要创建一个新的滚动条,定义滚动条和滑块相关的元素,然后设置你的选项,再创建一些回调事件的控制函数。尽管滚动条(Slider)遵循这个熟悉的模式,但是任然还有一点特殊的地方。 基本用法创建一个新的滚动条(Slider)对象 我们首先从HTML...

经验教程

164

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部