MooTools 1.2中的Drag.Move来实现拖放_Mootools

它的使用和我们见过的其他的插件类似:首先你使用“new”关键字来创建一个Drag.Move对象并赋值给一个变量,然后你再定义你的选项和事件。这就是全部要做的事情,不过你一定要注意一下下面的例子中描述的IE的CSS怪异现象。
基本用法
Drag.Move
创建你自己的拖动对象非常的容易。稍微看一下下面的例子就行了。注意一下我们是怎么把我们的Drag.Move对象的选项和事件从我们的Drag选项和事件中分离出来的。Drag.Move类扩展了Drag类,因此它可以接受Drag类的选项和事件。今天我们并不打算特别地讲一讲Drag类,不过我们还是要研究一下一些有用的选项和事件。看一下下面的代码,然后学习一下其中的细节。
参考代码:

复制代码 代码如下:

var myDrag = new Drag.Move(dragElement, {
// Drag.Move的选项
droppables: dropElement,
container: dragContainer,
// Drag的选项
handle: dragHandle,
// Drag.Move 的事件
// Drag.Move事件会传递拖动的元素,
// 还有可接纳拖动元素的元素(droppable)
onDrop: function(el, dr) {
// 显示拖动到可接纳元素的元素的id
alert(dr.get('id'));
},
// Drag事件
// Drag事件传递拖动的元素
onComplete: function(el) {
alert(el.get('id'));
}
});

在这里我们稍微打断一下……
Drag.Move选项
Drag.Move选项有两个很重要的元素:
droppables——设置可接纳的(droppable)元素的选择器(这个元素将会注册拖动相关的事件)
container——设置拖动元素的容器(可以保证元素一直在容器内)
设置这个选项非常的容易:
参考代码:

复制代码 代码如下:

// 这里我们通过id定义了一个元素
var dragElement = $('drag_element');
// 这里我们通过class定义了一组元素
var dropElements = $$('.drag_element');
var dragContainer = $('drag_container');
// 现在创建我们的Drag.Move对象
var myDrag = new Drag.Move(dragElement , {
// Drag.Move选项
// 把我们上面定义的droppable赋值给droppables
droppables: dropElements ,
// 把我们的容器元素变量赋值给容器
container: dragContainer
});

现在你的可接受拖动元素的元素就包含进来了,你就有了一个可以接受拖放元素的类。
Drag.Move事件
这个事件可以让你在不同的点去触发一个函数,比如当你开始拖动一个对象或者你准备放下它。每一个Drag.Move事件都将传递拖动元素和接受拖动元素的元素(我们一直叫做droppable)作为参数。
onDrop——这个事件将在一个可拖动的元素放到一个接受拖动元素的元素里面时触发。
onLeave——这个事件将在一个可拖动的元素离开一个接受拖动元素的元素时触发。
onEnter——这这个事件将在一个可拖动的元素进入一个接受拖动元素的元素时触发。
这些事件中的每一个事件都将调用一个函数,每个函数都将在相应的事件触发时调用。
参考代码:

复制代码 代码如下:

var dragContainer = $('drag_container');
var myDrag = new Drag.Move(dragElement , {
// Drag.Move选项
droppables: dropElements ,
container: dragContainer ,
// Drag.Move事件
// Drag.Move函数将传递可拖动的元素(这个例子中是'el')
// 还有接受拖动元素的元素(这个例子中是'dr')
onDrop: function(el, dr) {
// 下面这句的意思大概是:
// 如果你拖动的元素不是到了可以接受拖动元素的元素的范围内
if (!dr) {
// 什么都不做
}
// 否则(从逻辑上讲,
// 如果你拖动的那个的元素到了可接受拖动元素的元素范围内)
// 做这一件事件
else {
// 在这里做一些事情
};
},
onLeave: function(el, dr) {
// 这个事件将在拖动的元素离开可接受拖动对象的元素时触发
},
onEnter: function(el, dr) {
// 这个事件将在拖动的元素进入可接受拖动对象的元素时触发
}
});

一些Drag事件和选项
对于Drag,有许多选项和事件,不过这里我们只看一小部分。
snap——选项
snap选项可以让你设置用户的鼠标至少移动多少个像素后开始拖动。默认是6,你额可以设置为任何数字或者值为数字的变量。很明显,这里有一些合理的限制(比如设置snap为1000将毫无用处),但是这在定制你的用户体验时将会派上用场。
参考代码: [复制代码] [保存代码]
var myDrag = new Drag.Move(dragElement , {
// Drag选项
snap: 10
});
handle——选项
handle可以给你的拖动元素添加一个控制对象。这个控制对象将成为唯一的可以接受“抓取”(拖动)的元素,从而允许你使用其他的元素做一些其他的事情。要设置一个控制对象,只需调用这个元素就可以了。
参考代码:

复制代码 代码如下:

// 这里我们使用了一个类选择器建立了一个数组
// 这将使得我们很轻易地添加多个控制对象,如果我们决定要有多个可接受拖动元素的元素
var dragHandle = $('drag_handle');
var myDrag = new Drag.Move(dragElement , {
// Drag选项
handle: dragHandle
});

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

复制代码 代码如下:

var myDrag = new Drag.Move(dragElement , {
// Drag选项
// Drag选项将把拖动的元素作为参数传递
onStart: function(el) {
// 在这里放置开始拖动时你要做的任何事情
}
});

onDarg——事件
这个onDrag事件,将会在你拖动一个元素时连续地触发。
参考代码:

复制代码 代码如下:

var myDrag = new Drag.Move(dragElement , {
// Drag选项
// Drag选项将把拖动的元素作为参数传递
onDrag: function(el) {
// 在这里放置开始拖动时你要做的任何事情
}
});

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

复制代码 代码如下:

var myDrag = new Drag.Move(dragElement , {
// Drag选项
// Drag选项将把拖动的元素作为参数传递
onComplete: function(el) {
// 在这里放置开始拖动时你要做的任何事情
}
});

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

复制代码 代码如下:

window.addEvent('domready', function() {
var dragElement = $('drag_me');
var dragContainer = $('drag_cont');
var dragHandle = $('drag_me_handle');
var dropElement = $$('.draggable');
var startEl = $('start');
var completeEl = $('complete');
var dragIndicatorEl = $('drag_ind');
var enterDrop = $('enter');
var leaveDrop = $('leave');
var dropDrop = $('drop_in_droppable');
var myDrag = new Drag.Move(dragElement, {
// Drag.Move选项
droppables: dropElement,
container: dragContainer,
// Drag选项
handle: dragHandle,
// Drag.Move事件
onDrop: function(el, dr) {
if (!dr) { }
else {
dropDrop.highlight('#FB911C'); //橙色闪烁
el.highlight('#fff'); //白色闪烁
dr.highlight('#667C4A'); //绿色闪烁
};
},
onLeave: function(el, dr) {
leaveDrop.highlight('#FB911C'); //橙色闪烁
},
onEnter: function(el, dr) {
enterDrop.highlight('#FB911C'); //橙色闪烁
},
// Drag事件
onStart: function(el) {
startEl.highlight('#FB911C'); //橙色闪烁
},
onDrag: function(el) {
dragIndicatorEl.highlight('#FB911C'); //橙色闪烁
},
onComplete: function(el) {
completeEl.highlight('#FB911C'); //橙色闪烁
}
});
});

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

复制代码 代码如下:

/* 下面这个定义通常是不错的主意 */
body {
margin: 0
padding: 0
}
/* 确保可拖动的元素有"position: absolute" */
/* 并设置开始时的left和top属性 */
#drag_me {
width: 100px
height: 100px
background-color: #333
position: absolute
top: 0
left: 0
}
#drop_here {
width: 200px
height: 200px
background-color: #eee
}
/* 确保拖动的容器有“position:relative” */
#drag_cont {
background-color: #ccc
height: 600px
width: 500px
position: relative
margin-top: 100px
margin-left: 100px
}
#drag_me_handle {
width: 100%
height: auto
background-color: #666
}
#drag_me_handle span {
display: block
padding: 5px
}
.indicator {
width: 100%
height: auto
background-color: #0066FF
border-bottom: 1px solid #eee
}
.indicator span {
padding: 10px
display: block
}
.draggable {
width: 200px
height: 200px
background-color: blue
}

现在我们再建立我们的HTML:
参考代码:

复制代码 代码如下:

<div id="drag_cont">
<div id="start" class="indicator"><span>拖动开始</span></div>
<div id="drag_ind" class="indicator"><span>拖动中</span></div>
<div id="complete" class="indicator"><span>拖动结束</span></div>
<div id="enter" class="indicator"><span>进入了Droppable元素</span></div>
<div id="leave" class="indicator"><span>离开了Droppable元素</span></div>
<div id="drop_in_droppable" class="indicator"><span>放进了Droppable元素</span></div>
<div id="drag_me">
<div id="drag_me_handle"><span>控制对象</span></div>
</div>
<div id="drop_here" class="draggable"> </div>
</div>

更多学习……

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

  • Drag
  • Drag.Move

下载一个包含你开始所需要的所有东西的zip包

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

时间: 2024-10-15 11:18:47

MooTools 1.2中的Drag.Move来实现拖放_Mootools的相关文章

事件分发-Android中怎么根据move动作来决定事件是否分发?(事件冲突问题)

问题描述 Android中怎么根据move动作来决定事件是否分发?(事件冲突问题) 1C 我们知道安卓里一次touch事件是down move up组成的但是只有down事件返回为true时,这个view接下来才会接收到move和up事件,并且停止分发到其他的view里.现在我的问题是,我想通过move的动作来决定事件要给哪个view怎么办?想要查看move的动作,就必须down事件返回true,那么这次touch事件就被拦截掉了,没办法分配到其他的view上啊.举例说吧:现在有父控件和子控件的

为什么我的artdialog中的drag功能不能实现?

问题描述 为什么我的artdialog中的drag功能不能实现? 解决方案 什么版本的artdialog,6+导入dialog-plus这个插件才能拖拽.看这个:http://bbs.csdn.net/topics/391042474 其他版本没有drag这个配置吧..楼主什么版本的.. 而且你发的代码有问题,fixed配置放到art.dialog({....里面 解决方案二:

Mootools 1.2教程 设置和获取样式表属性_Mootools

欢迎开始这一系列的教程的第七讲.今天,我们来看一下如何通过MooTools 1.2和我们以前几讲中的内容来操作样式,这将给你在UI上带来很大的控制权.处理样式非常简单,不过今天我们要做一些调整.例如,我们要介绍键值对(key-value pair)对象.我们也会讲到在domready之外来传递变量,就像我们在关于函数的那一讲中学到的一样.从这里开始,我们会开始慢慢提高难度,介绍一些必要的编程概念.如果你是JavaScript新手或者第一次开始学MooTools,请确保你在明白了前面的教程,你可以

HTML5中的drag拖拽功能介绍

拖放(Drag 和 drop)是 HTML5 标准的组成部分,本文主要介绍与拖拽操作相关的对象及事件信息. 要接受元素的放下,目标元素必须监听至少3个事件: 首先是dragenter事件,用来决定是否接受"拖动的元素"被放下,如果接受放下,那么该事件就被取消,进入下一个事件 然后开始dragover事件,用来确定给用户什么样的反馈,即位于该元素之上时呈现什么样的效果,如果该事件被取消,反馈一般是一个鼠标指针, 也可以使用dropEffect属性定义,如果事件没有被取消,那么就是默认的行

Delphi中实现让TListView接收文件拖放

在使用Delphi开发应用程序时常常要使用到TListView列表视控件,但是仅仅使用TListView的原有属性.方法和事件是不够的,常常需要在程序开发过程中对列表视的功能进行扩展, 比如对列表视添加任意列组合排序.ListItem拖动.CustomDraw自绘制.加入背景图等功能,由此可见Delphi自带的TListView列表视控件功能有限,并不让人感到满意.为了让列表视具有更多的功能,我们只有求助于第三方控件,或者自己编写代码对TListView进行改造. 最近我在用Delphi开发一个

Mootools 1.2教程 同时进行多个形变动画_Mootools

这在你给多个元素添加有相同选项的形变动画时非常有用.就像我们在第20讲中看到的最后一个例子一样. 基本用法 使用Fx.Elements的方法看起来和Fx.Morph差不多.这两者之间的区别在于.start({})方法和.set({})方法. 为了保证事情简洁,让我们首先建立一个元素数组,以用来传递给Fx.Elements. 参考代码: [复制代码] [保存代码] var fxElementsArray = $$('.myElementClass'); 现在我们就可以把我们的数组传递给Fx.Ele

基于mootools 1.3框架下的图片滑动效果代码_Mootools

效果预览如下: 实现原理: 容器采用相对定位,图片采用绝对定位,当鼠标移动到相应的图片上,改变去left属性,用tween实现动画效果. 代码分析:写一个picSlider类实现代码封装 复制代码 代码如下: <div id="container"> <img src="http://files.jb51.net/file_images/article/201104/r_song1.jpg" alt="" /> <i

MooTools 1.2介绍_Mootools

MooTools 1.2 JavaScript库介绍 MooTools 1.2是个强大的轻量级的JavaScript库,专门为减轻Web中交互性JavaScript开发.在某种程度上,你可以认为MooTools是CSS的扩展.例如,CSS可以让你在鼠标移上去时发生改变.JavaScript允许你接触更多的时间(点击事件.鼠标悬停事件.键盘事件--),MooTools让这一切变得非常容易. 另外,MooTools还有各种各样的非常好的扩展,可以让你不只是改变一个元素的属性,还可以让你有"morph

Mootools 1.2教程 滚动条(Slider)_Mootools

尽管滚动条(Slider)遵循这个熟悉的模式,但是任然还有一点特殊的地方. 基本用法 创建一个新的滚动条(Slider)对象 我们首先从HTML和CSS开始.基本的想法是创建一个滚动条的div,因此是一个长的长方形(长度取决于我们用滚动条做什么),还有一个子元素作为滑块. 参考代码: 复制代码 代码如下: <div id="slider"><div id="knob"></div></div> 我们的CSS也可以这么简