【发布时间】:2018-04-13 09:50:22
【问题描述】:
我有一个页面,为了创建一个新的可调整大小/可拖动的div,用户单击画布上的任意位置,它会出现在单击事件发生的位置旁边。
一旦新元素出现,用户就可以调整大小或拖动它。
更好的用户体验是允许用户按下鼠标,将新的div 拖动到所需的大小,然后鼠标向上完成创建。例如
我想要什么
这就像在这个网站上绘制矩形的工作原理:https://awwapp.com/
我有什么
您会看到,当检测到拖动时,我的代码只是附加了新的div。然后用户必须返回并调整大小。
在研究使用 jQuery 检测拖动时,我一般没有发现太多,apart from this 但即使这个示例在我需要单击和拖动时也是非常多的单击或拖动。
为了简洁起见,我的代码目前是:
function newPlaceholderPosition(posX, posY, X, Y) {
cssTop = (Y - posY);
cssLeft = (X - posX);
var styles = [
"top: "+ Math.round(cssTop / 10) * 10 +"px;",
"left: "+ Math.round(cssLeft / 10) * 10 +"px;"
].join(' ');
return styles.toString();
}
function makePlaceholdersFunctional(elements) {
elements.resizable({
containment: "parent",
handles: 'ne, se, sw, nw',
minWidth: 100,
minHeight: 40,
autoHide: true,
});
elements.draggable({
containment: "parent",
drag: function() {
$("body").addClass("element-moving");
},
stop: function() {
$("body").removeClass("element-moving");
}
});
}
var isDragging = false;
$(".canvas")
.mousedown(function(e) {
isDragging = false;
// Log where the click took place
clickLocation = newPlaceholderPosition($(this).offset().left, $(this).offset().top, e.pageX, e.pageY);
})
.mousemove(function(e) {
// If the user is not dragging an existing div
if(!$('.canvas').hasClass("child-active")) {
isDragging = true;
}
})
.mouseup(function() {
var wasDragging = isDragging;
isDragging = false;
if (!wasDragging) {
// console.log("You weren't dragging on the canvas")
} else {
// console.log("You WERE dragging on the canvas")
$(".canvas").append('<div class="resizable" data-id="' + parseInt( $(".resizable").length + 1) + '" style="'+ clickLocation +'"></div>');
makePlaceholdersFunctional($(".resizable:last"));
}
});
使用 jQuery UI 可以实现这样的事情吗?有人可以举个例子吗?
【问题讨论】:
-
我需要点击并拖动是什么意思?我不完全理解你的问题。
-
当用户按住鼠标单击时,新元素应该出现并且可以从右下角调整大小。仅仅确定用户正在拖动并因此附加
div是不够的。转到awwapp.com 并绘制一个矩形 - 这就是我想要做的。 -
@dom_ahdigital 你想在
<div>添加到 DOM 之前使用 resizable 来绘制它,还是创建<div>然后你希望用户能够调整它的大小? -
@dom_ahdigital 尚未完成,但这里有一个替代方案 jsfiddle.net/Twisty/42zeudf6
-
抱歉耽搁了。是的,要求是在将
div添加到 DOM 之前绘制它。
标签: jquery jquery-ui jquery-ui-draggable jquery-ui-resizable