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

它的使用和我们见过的其他的插件类似:首先你使用“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>

更多学习……

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

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

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

(0)

相关推荐

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

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

  • 一文搞懂c++中的std::move函数

    目录 前言 左值和右值 左值引用 右值引用 std::move函数 remove_reference源码剖析 std::forward源码剖析 std::move()源码剖析 小结 std::move使用场景 实例:vector::push_back使用std::move提高性能 万能引用 引用折叠 完美转发 前言 在探讨c++11中的Move函数前,先介绍两个概念(左值和右值) 左值和右值 首先区分左值和右值 左值是表达式结束后依然存在的持久对象(代表一个在内存中占有确定位置的对象) 右值是表

  • Mootools 1.2教程 滚动条(Slider)

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

  • MooTools 1.2介绍

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

  • 学习drag and drop js实现代码经典之作

    Pro Javascript Techniques书中推荐的drag and drop 例子:http://boring.youngpup.net/2001/domdrag Drag var Drag = { //当前被drag的对象 obj: null, //初始化 init: function(id){ var o = document.getElementById(id); //当onmousedown开始拖拽 o.onmousedown = Drag.start; }, start: f

  • Mootools 1.2教程 Tooltips

    我们还将仔细学习一下工具提示的选项和事件,还有一些用来从元素上添加和移除工具提示的工具.最后,我们将学习一下怎么让一个页面有多个不同样式的工具提示. 基础知识 创建一个新的工具提示 创建一个新的工具提示非常简单.首先,我们来创建一个要添加工具提示的链接: 参考代码: 复制代码 代码如下: <a class="tooltipA" title="1st Tooltip Title" rel="here is the default 'text' of 1

  • Mootools 1.2 手风琴(Accordion)教程

    创建和配置一个基本的手风琴很简单,但是你一定要认真看完全文,因为更多的高级选项可能有一些复杂. 基础知识 创建一个新的手风琴 要创建一个新的手风琴,你需要选择一些成对的元素--包含标题和内容.因此,首先,需要给每一个标题和每一个内容块分别指定一个css类名: 参考代码: 复制代码 代码如下: <h3 class="togglers">Toggle 1</h3> <p class="elements">Here is the con

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

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

  • 通过Mootools 1.2来操纵HTML DOM元素

    我们已经学习过如何来选取DOM元素,怎么创建数组,怎么创建函数,怎么把事件添加到元素,今天我们来深入地学习一下如果操纵HTML元素.通过MooTools 1.2,你可以添加新元素到一个HTML页面中,也可以删除元素,以及改变任何样式或者元素参数,这些都非常容易. 基本方法 .get(); 这个工具可以让你获取元素的属性(property).元素的属性是组成一个HTML元素的各种不同部分,例如src.value.name等等.使用.get();方法非常简单: 参考代码: 复制代码 代码如下: //

  • Mootools 1.2教程 事件处理

    今天我们开始第五讲,在上一讲(<Mootools 1.2教程(4)--函数>)中,我们学习了在MooTools 1.2中建立和使用函数的几种不同方式.下一步就是理解事件了.和选择器类似,事件也是建立互动界面的一个重要部分.一旦你掌握了一个元素,你需要去决定什么行为来触发什么效果.先把效果留着以后在讲,我们首先看一看中间步骤和一些常见的事件. 左键单击事件 左键单击事件是web开发中最常见的事件.超链接识别点击事件,然后把你带到另外一个URL地址.MooTools能够识别其他DOM元素上的点击事

随机推荐