MooTools - 拖放
MooTools 提供了一项强大的功能,可帮助您将拖放功能添加到网页元素中。我们可以通过创建自己的新 Drag.Move 对象来实现这一点。使用此对象,您可以定义选项和事件。Drag 和 Drag.Move 类来自 MooTools More 库。
让我们讨论一下 Drag.Move 对象的选项和事件。
Drag.Move
Drag.Move 是一个用于向 html 元素添加拖放功能的对象。Drag.Move 扩展了 Drag,因此我们可以通过 Drag.Move 对象使用 Drag 类的所有选项和事件。查看以下语法并了解如何使用 Drag.Move 对象。
语法
var myDrag = new Drag.Move(dragElement, {
// Drag.Move 选项
droppables: dropElement,
container: dragContainer,
// 拖动选项
handle: dragHandle,
// Drag.Move 事件
// Drag.Move 事件传递被拖动元素,
// 和放入可放置元素
onDrop: function(el, dr) {
// 将提醒放入可放置元素的 id
alert(dr.get('id'));
},
// 拖动事件
// 拖动事件传递被拖动元素
onComplete: function(el) {
alert(el.get('id'));
}
});
Drag.Move 选项
Drag.Move 提供以下选项来维护具有拖放功能的 html 元素 −
droppable − 这有助于您设置可拖放元素(在拖放相关事件上注册的元素)的选择器。
container − 这有助于您设置拖动元素的容器(将元素保留在里面)。
snap − 这有助于您设置在可拖动元素开始拖动之前用户必须拖动光标多少 px。默认值为 6,您可以将其设置为表示数字的任意数量的变量。
handle − 这有助于您为可拖动元素添加句柄。 Handle 成为唯一接受抓取的元素。
查看以下语法,了解如何以及在何处定义可放置元素、容器元素、捕捉元素和手柄元素。
语法
//此处我们通过 id 定义单个元素
var dragElement = $('drag_element');
//此处我们通过 class 定义元素数组
var dropElements = $$('.drag_element');
var dragContainer = $('drag_container');
var dragHandle = $('drag_handle');
//现在我们设置 Drag.Move 对象
var myDrag = new Drag.Move(dragElement , {
// Drag.Move 选项
// 使用我们上面定义的 droppables 变量设置我们的 droppables 元素
droppables: dropElements ,
// 使用容器元素变量设置我们的容器元素
container: dragContainer
// 设置用户必须拖动的像素。
Snap: 10
// 为可拖动元素添加句柄
handle: dragHandle
});
Drag.Move 事件
Drag.Move 事件提供不同的功能,可用于不同级别的操作。例如,当您开始拖放对象时,每个 Drag.Move 事件都会将拖动元素或放置元素作为参数传递。
以下是支持的事件 −
onStart()
这会在拖动开始时引发事件。如果您设置了长捕捉,则此事件直到鼠标处于一定距离时才会引发。看一下以下语法。
语法
var myDrag = new Drag.Move(dragElement , {
// 拖动选项将把拖动的元素作为参数传递
onStart: function(el) {
// 将你想要在开始时发生的任何事放在这里
}
});
onDrag()
这会在您拖动元素时持续引发事件。请查看以下语法。
语法
var myDrag = new Drag.Move(dragElement , {
// 拖动选项将把拖动的元素作为参数传递
onDrag: function(el) {
// 将你想要在拖动时发生的任何事放在这里
}
});
onDrop()
将可拖动元素放入可放置元素中时,会引发事件。请查看以下语法。
语法
var myDrag = new Drag.Move(dragElement , {
// 它将传递可拖动元素(本例中为"el")
// 以及可拖动元素与之交互的可放置元素(此处为"dr")
onDrop: function(el, dr) {
// 将您希望在放置时发生的任何操作放入此处
}
});
onLeave()
当可拖动元素离开可放置元素的边界时,会引发事件。看一下以下语法。
语法
var myDrag = new Drag.Move(dragElement , {
// 它将传递可拖动元素(本例中为 'el')
// 以及可拖动元素与之交互的可放置元素(此处为 'dr')
onLeave: function(el, dr) {
// 在此处输入离开可放置区域时要发生的任何操作
}
});
onEnter()
当可拖动元素进入可放置元素区域时,将引发此事件。看看下面的语法。
语法
var myDrag = new Drag.Move(dragElement , {
// 它将传递可拖动元素(本例中为"el")
// 以及可拖动元素与之交互的可放置元素(此处为"dr")
onEnter: function(el, dr) {
// 当可拖动元素进入可放置元素时,将触发此事件
}
});
onComplete()
这会引发一个事件。onComplete 指的是您放下可放置元素时,无论您是否落入可放置元素中,它都会引发此事件。看看下面的语法。
语法
var myDrag = new Drag.Move(dragElement , {
// Drag Options
// 拖动选项将把拖动的元素作为参数传递
onComplete: function(el) {
// 将你想要发生的事情放在完成位置
}
});
让我们举一个例子来探索本章中解释的所有功能。这些功能包括 — Drag、Drag.Move、onEnter、onLeave、onDrop、onStart、onDrag 和 onComplete。在这个例子中,我们提供了一个 HANDLE,您可以使用它将可拖动对象拖到容器中的任何位置。对于每个操作,左侧都有一个通知(以蓝色表示)。容器中有一个可放置区域。如果可拖动对象进入可放置区域,则激活最后三个指示器。看看下面的代码。
示例
<!DOCTYPE html>
<html>
<head>
<style>
/* this is generally a good idea */
body {
margin: 0;
padding: 0;
}
/* make sure the draggable element has "position: absolute"
and then top and left are set for the start position */
#drag_me {
width: 100px;
height: 100px;
background-color: #333;
position: absolute;
top: 0;
left: 0;
}
#drop_here {
width: 80%;
height: 200px;
background-color: #eee;
margin-left: 100px;
margin-top: -200px !important;
}
/* make sure the drag container is set with position relative */
#drag_cont {
background-color: #ccc;
height: auto;
width: 500px;
position:relative;
margin-top: 20px;
margin-left: 20px;
margin-bottom: auto;
}
#drag_me_handle {
width: 100%;
height: auto;
background-color: #F5B041;
}
#drag_me_handle span {
display: block;
padding: 20px;
}
.indicator {
width: 100px;
height: auto;
background-color: #0066FF;
border-bottom: 1px solid #eee;
}
.indicator span {
padding: 10px;
display: block;
}
.draggable {
width: 200px;
height: 200px;
background-color: blue;
}
</style>
<script type = "text/javascript" src = "MooTools-Core-1.6.0.js"></script>
<script type = "text/javascript" src = "MooTools-More-1.6.0.js"></script>
<script type = "text/javascript">
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 options
droppables: dropElement,
container: dragContainer,
// Drag options
handle: dragHandle,
// Drag.Move Events
onDrop: function(el, dr) {
if (!dr) { }else {
dropDrop.highlight('#FB911C'); //flashes orange
el.highlight('#fff'); //flashes white
dr.highlight('#667C4A'); //flashes green
};
},
onLeave: function(el, dr) {
leaveDrop.highlight('#FB911C'); //flashes orange
},
onEnter: function(el, dr) {
enterDrop.highlight('#FB911C'); //flashes orange
},
// Drag Events
onStart: function(el) {
startEl.highlight('#FB911C'); //flashes orange
},
onDrag: function(el) {
dragIndicatorEl.highlight('#FB911C'); //flashes orange
},
onComplete: function(el) {
completeEl.highlight('#FB911C'); //flashes orange
}
});
});
</script>
</head>
<body>
<p align = "center">Drag and Drop Application</p>
<div id = "drag_cont">
<div id = "start" class = "indicator"><span>Start</span></div>
<div id = "drag_ind" class = "indicator"><span>Drag</span></div>
<div id = "complete" class = "indicator"><span>Complete</span></div>
<div id = "enter" class = "indicator"><span>Enter Droppable Element</span></div>
<div id = "leave" class = "indicator"><span>Leave Droppable Element</span></div>
<div id = "drop_in_droppable" class = "indicator">
<span>Dropped in Droppable Element</span>
</div>
<div id = "drag_me">
<div id = "drag_me_handle"><span>HANDLE</span></div>
</div>
<div id = "drop_here" class = "draggable">
<p align = "center">Droppable Area</p>
</div>
</div>
</body>
</html>
您将收到以下输出,其中,您必须单击"句柄"并拖动它。您现在可以在左侧找到通知指示。
输出

