Jquery UI draggable不调整其他DIV的大小 [英] Jquery UI draggable doesn't resize other DIVs
问题描述
在这个plunk 中,我有三个 DIV
除以另外两个可拖动(灰色)的 DIV
。当向上/向下或向左/向右拖动可拖动 DIV
时,应调整其他 DIV
/ p>
第一个可拖动DIV工作正常(左边的那个垂直调整其他DIV)。但是第二个可拖动的 DIV
不工作,即使该方法与第一个可拖动 DIV
相同。任何想法如何解决这个问题?
JavaScript
var top1H, bottom1H;
$(#div1).draggable({
axis:y,
start:function(event,ui){
shiftInitial = ui.position.top;
top1H = $(#top1)。height();
bottom1H = $(#bottom1)。height();
},
drag:function event,ui){
var shift = ui.position.top;
$(#top1)。height(top1H + shift - shiftInitial);
$(#bottom1) .height(bottom1H - shift + shiftInitial);
}
});
var right1W,left1W;
$(#div2).draggable({
axis:y,
start:function(event,ui){
shiftInitial = ui.position.left;
right1W = $(#right1)。height();
left1W = $(#left1)。height();
},
drag:function事件,ui){
var shift = ui.position.left;
$(#right1)。height(right1W + shift - shiftInitial);
$(#left1) .height(left1W - shift + shiftInitial);
}
});
HTML
< div>
< div id =left1>
< div id =top1>< / div>
< div id =div1>< / div>
< div id =bottom1>< / div>
< / div>
< div id =div2>< / div>
< div id =right1>< / div>
< / div>
CSS
#div1 {
width:180px;
height:6px;
background-colour:#e0e0e0;
cursor:ns-resize;
position:absolute;
}
#div2 {
width:6px;
height:200px;
background-color:#e0e0e0;
float:left;
cursor:ew-resize;
}
#top1 {
width:180px;
height:100px;
background-color:orange;
}
#bottom1 {
width:180px;
height:100px;
background-color:blue;
}
#left1 {
width:180px;
height:200px;
float:left;
background-color:orange;
}
#right1 {
height:200px;
background-color:red;
width:100%;
}
解决方案可拖动
DIV
工作正常我只修复了第二个。
您的代码有两个问题:
- 您为两个可拖动元素赋予了
axis:y
属性 c
- 第二次拖动的变化应该在宽度上(而不是高度上)。
$(function top1H,bottom1H; var right1W,left1W; $(#div1).draggable({axis:y,start:function(event,ui){shiftInitial = ui.position.top; top1H = $ ).height(); bottom1H = $(#bottom1)。height(); },drag:function(event,ui){var shift = ui.position.top; $(#top1)。height(top1H + shift - shiftInitial); $(#bottom1)height(bottom1H - shift + shiftInitial); }}); $(#div2).draggable({axis:x,start:function(event,ui){shiftInitial = ui.position.left; right1W = $(#right1)width(); left1W = $(#left1)。width();},drag:function(event,ui){var shift = ui.position.left; $(#left1 div)。width(left1W + shift);} ); });
#div1 {width:180px; height:6px; background-color:#e0e0e0; cursor:ns-resize; position:absolute;}#div2 {width:6px; height:200px; background-color:#e0e0e0; float:left; cursor:ew-resize; left:180px;}#top1 {width:180px; height:100px; background-color:orange;}#bottom1 {width:180px; height:100px; background-color:blue;}#left1 {width:0; height:200px; float:left; background-color:orange;}#right1 {height:200px; background-color:red; width:100%;}
< script src = //code.jquery.com/jquery-2.1.3.min.js\"> ;</script><link rel =stylesheethref =// cdnjs.cloudflare.com/ajax/libs/jqueryui/ 1.10.0 / css / smoothness / jquery-ui-1.10.0.custom.min.css/>< script src =// cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/jquery -ui.js>< / script>< div> < div id =left1> < div id =top1>< / div> < div id =div1>< / div> < div id =bottom1>< / div> < / div> < div id =div2>< / div> < div id =right1>< / div>< / div>
请注意,如果您拖动当前块的外部边框,代码将 NOT 工作。为此,您还需要检查新的宽度/高度是否大于原始宽度/高度,并相应地更改所有元素。
更新 - 允许更改红色框的高度
(最好在全页模式下查看此项)
$(function(){var minHeight = $('#right1')。height ; var top1H,bottom1H; var right1W,left1W; $(#div1).draggable({axis:y,start:function(event,ui){shiftInitial = ui.position.top; top1H = $( #top1)。height(); bottom1H = $(#bottom1)。height();},drag:function(event,ui){var shift = ui.position.top; $(#top1) .height(top1H + shift-shiftInitial); $(#bottom1)。height(bottom1H - shift + shiftInitial); $('#right1,#div2')。height(Math.max(minHeight,Math.max $('#top1')。height()+ $('#bottom1')。height()+ $('#div1')。 ; }}); $(#div2).draggable({axis:x,start:function(event,ui){shiftInitial = ui.position.left; right1W = $(#right1)width(); left1W = $(#left1)。width();},drag:function(event,ui){var shift = ui.position.left; //$(\"#right1\").width(right1W- shift + shiftInitial) ; $(#left1 div)。width(left1W + shift);}});});
#div1 {width:180px; height:6px; background-color:#e0e0e0; cursor:ns-resize; position:absolute;}#div2 {width:6px; height:200px; background-color:#e0e0e0; float:left; cursor:ew-resize; left:180px;}#top1 {width:180px; height:100px; background-color:orange;}#bottom1 {width:180px; height:100px; background-color:blue;}#left1 {width:0; height:200px; float:left; background-color:orange;}#right1 {height:200px; background-color:red; width:100%;}
< script src = //code.jquery.com/jquery-2.1.3.min.js\"> ;</script><link rel =stylesheethref =// cdnjs.cloudflare.com/ajax/libs/jqueryui/ 1.10.0 / css / smoothness / jquery-ui-1.10.0.custom.min.css/>< script src =// cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/jquery -ui.js>< / script>< div> < div id =left1> < div id =top1>< / div> < div id =div1>< / div> < div id =bottom1>< / div> < / div> < div id =div2>< / div> < div id =right1>< / div>< / div>
这个版本不会让你选择降低高度改变后块的高度。
In this plunk I have three
DIV
s divided by two otherDIV
s that are draggable (gray color). When the draggableDIV
s are dragged up/down or left/right, the otherDIV
s should be resized.The first draggable DIV works fine (the one on the left that resizes the other DIVs vertically). But the second draggable
DIV
doesn't work, even though the method is the same as the first draggableDIV
. Any ideas how to fix this?Javascript
var top1H, bottom1H; $( "#div1" ).draggable({ axis: "y", start: function(event, ui) { shiftInitial = ui.position.top; top1H = $("#top1").height(); bottom1H = $("#bottom1").height(); }, drag: function(event,ui) { var shift = ui.position.top; $("#top1").height(top1H + shift - shiftInitial); $("#bottom1").height(bottom1H - shift + shiftInitial); } }); var right1W, left1W; $( "#div2" ).draggable({ axis: "y", start: function(event, ui) { shiftInitial = ui.position.left; right1W = $("#right1").height(); left1W = $("#left1").height(); }, drag: function(event,ui) { var shift = ui.position.left; $("#right1").height(right1W + shift - shiftInitial); $("#left1").height(left1W - shift + shiftInitial); } });
HTML
<div> <div id="left1"> <div id="top1"></div> <div id="div1"></div> <div id="bottom1"></div> </div> <div id="div2"></div> <div id="right1"></div> </div>
CSS
#div1 { width:180px; height:6px; background-color:#e0e0e0; cursor:ns-resize; position: absolute; } #div2{ width:6px; height:200px; background-color:#e0e0e0; float:left; cursor:ew-resize; } #top1{ width:180px; height:100px; background-color:orange; } #bottom1 { width:180px; height:100px; background-color:blue; } #left1{ width:180px; height:200px; float:left; background-color:orange; } #right1{ height:200px; background-color:red; width:100%; }
解决方案Since you mentioned that you first dragable
DIV
works fine I fixed only the second one.There are two problems with your code:
- You gave both draggable elements the
axis: "y"
attribute (while the second should be grad onX
axis.- The change on the second drag was supposed to be on the width (and not on the height).
$(function() { var top1H, bottom1H; var right1W, left1W; $( "#div1" ).draggable({ axis: "y", start: function(event, ui) { shiftInitial = ui.position.top; top1H = $("#top1").height(); bottom1H = $("#bottom1").height(); }, drag: function(event,ui) { var shift = ui.position.top; $("#top1").height(top1H + shift - shiftInitial); $("#bottom1").height(bottom1H - shift + shiftInitial); } }); $( "#div2" ).draggable({ axis: "x", start: function(event, ui) { shiftInitial = ui.position.left; right1W = $("#right1").width(); left1W = $("#left1").width(); }, drag: function(event,ui) { var shift = ui.position.left; $("#left1 div").width(left1W + shift); } }); });
#div1 { width:180px; height:6px; background-color:#e0e0e0; cursor:ns-resize; position: absolute; } #div2{ width:6px; height:200px; background-color:#e0e0e0; float:left; cursor:ew-resize; left: 180px; } #top1{ width:180px; height:100px; background-color:orange; } #bottom1 { width:180px; height:100px; background-color:blue; } #left1{ width:0; height:200px; float:left; background-color:orange; } #right1{ height:200px; background-color:red; width:100%; }
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/css/smoothness/jquery-ui-1.10.0.custom.min.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/jquery-ui.js"></script> <div> <div id="left1"> <div id="top1"></div> <div id="div1"></div> <div id="bottom1"></div> </div> <div id="div2"></div> <div id="right1"></div> </div>
Note that the code will NOT work if you drag the borders "outside" of the current block. To do so you will also need to check if the new width/height is bigger than the original and change all the elements accordingly.
Update - allow change the height of the "red" box
(It's better to view this in "full page" mode)
$(function() { var minHeight = $('#right1').height(); var top1H, bottom1H; var right1W, left1W; $( "#div1" ).draggable({ axis: "y", start: function(event, ui) { shiftInitial = ui.position.top; top1H = $("#top1").height(); bottom1H = $("#bottom1").height(); }, drag: function(event,ui) { var shift = ui.position.top; $("#top1").height(top1H + shift - shiftInitial); $("#bottom1").height(bottom1H - shift + shiftInitial); $('#right1,#div2').height(Math.max( minHeight, Math.max( $('#top1').height()+$('#div1').height(), $('#top1').height()+$('#bottom1').height() ))); } }); $( "#div2" ).draggable({ axis: "x", start: function(event, ui) { shiftInitial = ui.position.left; right1W = $("#right1").width(); left1W = $("#left1").width(); }, drag: function(event,ui) { var shift = ui.position.left; //$("#right1").width(right1W - shift + shiftInitial); $("#left1 div").width(left1W + shift); } }); });
#div1 { width:180px; height:6px; background-color:#e0e0e0; cursor:ns-resize; position: absolute; } #div2{ width:6px; height:200px; background-color:#e0e0e0; float:left; cursor:ew-resize; left: 180px; } #top1{ width:180px; height:100px; background-color:orange; } #bottom1 { width:180px; height:100px; background-color:blue; } #left1{ width:0; height:200px; float:left; background-color:orange; } #right1{ height:200px; background-color:red; width:100%; }
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/css/smoothness/jquery-ui-1.10.0.custom.min.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/jquery-ui.js"></script> <div> <div id="left1"> <div id="top1"></div> <div id="div1"></div> <div id="bottom1"></div> </div> <div id="div2"></div> <div id="right1"></div> </div>
This version will not give you the option to "lower" the height of your blocks once the height changed.
这篇关于Jquery UI draggable不调整其他DIV的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!