【发布时间】:2013-03-21 20:50:46
【问题描述】:
抱歉标题,我不知道如何正确解释这个问题。
我正在尝试将 div 添加到容器中并能够移动它们以定位它们。如果您查看this fidddle 并将鼠标悬停在 div 上(不是红色的,而是包裹它的那个),您将能够单击“新建容器”按钮,它将添加一个容器。但是,如果你调整这个容器的大小,你会看到它下面的 div 跳到它上面。
我做错了什么还是这是预期的功能?我不希望有任何重叠,理想情况下希望新的 div 位于现有 div 的上方或下方(取决于您拖动它的位置)。
编辑:
要重现问题,请将鼠标悬停在红色框(未打开)旁边,您将看到一个选择框出现。当它出现时单击一次,然后单击新建容器按钮。这将在红色框上方添加一个 div。如果您尝试重新调整红色框的大小,则红色 div 会向上移动。
编辑 2
好的,我注意到“为什么”会发生这种情况。 JQuery 将元素更改为在调整大小时绝对定位,因此这会停止浮动工作。有什么办法可以去掉吗?
HTML:
<div class="editable_content" style="padding:10px;">
<div style="width: 100%; padding:10px; height: 400px;">
<div style="width:100%; float:left; height:100px; background:red"></div>
</div>
</div>
<input type="button" id="new_container" value="New Container" />
CSS:
.edit_mouse_on {
background-color: #bcd5eb !important;
outline: 2px solid #5166bb !important;
}
.edit_selected {
outline: 2px solid red !important;
}
.ui-resizable-helper { border: 2px dotted #00F; }
JS:
var prevElement = null;
var selectedElement;
var enableHoverAction = true;
var allowedEditableClasses = "editable_content"
var hoverClass = "edit_mouse_on";
var selectedClass = "edit_selected";
document.addEventListener('mousemove', function (e) {
var elem = e.target || e.srcElement;
if (prevElement != null) detach(prevElement);
attach(elem);
prevElement = elem;
}, true);
function attach(obj) {
if (enableHoverAction) {
if (obj != null) {
if ($(obj).parents("div.editable_content").length) {
$(obj).addClass(hoverClass);
$(obj).bind("click", function (e) {
e.preventDefault();
select(this);
});
}
}
}
}
function select(obj) {
selectedElement = obj;
enableHoverAction = false;
$(obj).addClass(selectedClass);
$(obj).removeClass(hoverClass);
}
function detach(obj) {
if (enableHoverAction) {
if (obj != null) {
$(obj).removeClass(hoverClass);
$(obj).unbind("click");
}
}
}
$(document).ready(function () {
$("#new_container").click(function () {
$("<div/>", {
"style": "border:1px solid black; width:100px;height:100px; float:left;margin-bottom:1px;display:inline;clear:both",
text: "",
}).resizable({
helper: "ui-resizable-helper"
}).draggable({
cursor: "crosshair",
cursorAt: {
top: 0,
left: 0
}
}).prependTo(selectedElement);
});
});
【问题讨论】:
-
你必须添加代码的原因是因为一个只有 jsfiddle 链接的问题不是一个好问题。请参阅此答案和 meta 上的其他答案以获得更好的解释。 meta.stackexchange.com/a/114944
-
在我们讨论这个问题时,您认为您可以使用相关代码更新您的问题吗? :) 谢谢。
-
相关代码和示例在jsFiddle中。当我链接到它时,在这里发布它是没有意义的,但是如果需要的话,我会扩大我的帖子......只需阅读 Meta 帖子。说得通。谢谢。
-
好吧,如果您阅读我链接到的答案,您会发现如果 jsfiddle 无法访问,那么根据您提供的信息,没有人能够帮助回答您的问题。因此,在您的问题中添加一些代码将帮助人们回答您的问题,无论他们是否可以使用 jsfiddle,并有助于为未来的用户提供有关该问题的一些背景信息。
-
@MatthewGreen - 是的,在发布后看到了(我猜我的评论编辑到晚了)。感谢您的澄清,这是有道理的。
标签: jquery css drag-and-drop draggable jquery-ui-resizable