我在jQuery中使用jsPlumb
我想知道是否有办法获取元素的位置,同时将其拖放到容器中?
我正在做一个正在工作的交叉, 但在保存位置之前不会重新绘制我的连接点和锚点。
<script type='text/javascript'>
$(window).load(function(){
$('#flowchartdrag".$id_kurs."').draggable({
drag: function() {
var parentLeft = $('#flexwrap".$dynamiccounter."').position().left;
var parentTop = $('#flexwrap".$dynamiccounter."').position().top;
var offset = $(this).position();
var xPos = (offset.left - parentLeft);
var yPos = (offset.top - parentTop );
$('#x".$id_kurs."').val(xPos);
$('#y".$id_kurs."').val(yPos);
},
stop: function(event, ui) {
// Show dropped position.
var parentLeft = $('#flexwrap".$dynamiccounter."').position().left;
var parentTop = $('#flexwrap".$dynamiccounter."').position().top;
var Stoppos = $(this).position();
var left = (Stoppos.left - parentLeft);
var top = (Stoppos.top - parentTop);
$('#x".$id_kurs."').val(left);
$('#y".$id_kurs."').val(top);
},
containment: $('#flexwrap".$dynamiccounter."')
});
});
我尝试使用
jsPlumb.repaint;
但那不起作用
这就是我用jsPlumb
创建可拖动元素的方法instance'.$dynamiccounter.'.draggable(jsPlumb.getSelector("#flexcontent'.$dynamiccounter.' .dragable"));
但是如何将x / y坐标设置为元素文本字段以将位置保存到数据库中?
答案 0 :(得分:5)
你可以从jQuery拖动函数获取DIV的位置,同时你需要重新绘制被拖动元素的连接:
$('SELECTOR').draggable({
containment: $('PARENT_SELECTOR'),
drag:function(e){
// Your code comes here
jsPlumb.repaint($(this)); // Note that it will only repaint the dragged element
},
stop: function(e){
// Your code for capturing dragged element position.
}
})
更新了 JSFIDDLE
注意:以上代码只会重新绘制拖动的元素。如果被拖动的元素子元素也有连接,那么它将无法为它们工作。
答案 1 :(得分:3)
就像Alemv的答案一样,但不太具体(适用于所有情况),并使用jPlumb的演示:
jsPlumb.ready(function () {
//....
instance.batch(function () {
//...
divsWithWindowClass = jsPlumb.getSelector(".window");
//...
instance.draggable(divsWithWindowClass, {
drag: function() {
// Your code
},
stop: function(event, ui) {
// Your code
}
});
});
});
答案 2 :(得分:1)
您可以将jQueryUI draggable添加到您的jsPlumb元素中:
instance'.$dynamiccounter.'.draggable(jsPlumb.getSelector("#flexcontent'.$dynamiccounter.' .dragable"), {
drag: function() {
var parentLeft = $('#flexwrap".$dynamiccounter."').position().left;
var parentTop = $('#flexwrap".$dynamiccounter."').position().top;
var offset = $(this).position();
var xPos = (offset.left - parentLeft);
var yPos = (offset.top - parentTop );
$('#x".$id_kurs."').val(xPos);
$('#y".$id_kurs."').val(yPos);
},
stop: function(event, ui) {
// Show dropped position.
var parentLeft = $('#flexwrap".$dynamiccounter."').position().left;
var parentTop = $('#flexwrap".$dynamiccounter."').position().top;
var Stoppos = $(this).position();
var left = (Stoppos.left - parentLeft);
var top = (Stoppos.top - parentTop);
$('#x".$id_kurs."').val(left);
$('#y".$id_kurs."').val(top);
},
containment: $('#flexwrap".$dynamiccounter."')
});
jsPlumb.draggable的第二个参数传递给jQueryUI draggable。因此,此处的拖动功能不需要jsPlumb.repaint
。