jsfiddle link。
我想当mousedown
事件触发#flyingDiv
我可以移动它围绕#holder
,当mouseup
和鼠标离开#holer
我不能移动它。在我的代码有时#flyingDiv
定位在黑色边框附近时,我将鼠标移动到#holder
的中心。
HTML:将div分隔为另一个格
<div id="holder" style="position: relative; margin: 20px auto; border: 1px solid black; width: 400px !important; height: 400px !important;">
<div id="flyingDiv" style="position: absolute; background-color: green; width: 10px !important; height: 10px !important; left: 195px; top: 195px;"></div>
</div>
的Javascript:
$(function(){
var fd = $("#flyingDiv");
$("#flyingDiv").bind("mousedown", function(event) {
$(this).attr("pressed", true);
});
$("#holder").bind("mouseup", function(event) {
$("#flyingDiv").removeAttr("pressed");
});
$("#holder").bind("mousemove", function(event) {
var div = $("#flyingDiv");
if (div.attr("pressed")) {
var width = div.width();
if (event.offsetX >= width/2 && ($(this).width() - event.offsetX) >= width/2) {
div.css("left", parseInt(event.offsetX - width/2) + "px");
}
var height = div.height();
if (event.offsetY >= height/2 && ($(this).height() - event.offsetY) >= width/2) {
div.css("top", parseInt(event.offsetY - height/2) + "px");
}
}
});
});
UPD
我发现,如果event.eventPhase == 3
这是旧的事件。 Link
但仍然代码工作不快。
这是很好'jQuery的UI'功能,但我不会在Javascript上编写自己的代码并理解为什么我的变体不起作用。我使用'jQuery'只是为了方便地添加属性和CSS属性,并且为了便于社区理解,很容易用清晰的Javascript代码替换我的代码。但是我喜欢你的答案,并首先尝试使用'jQuery UI',谢谢。 – ostapische
这是个好主意!你可以通过浏览jQuery可拖动的源代码开始,看看有什么不同。请记住,DOM查询和写入始终是缓慢的操作。 – algoni