jsfiddle example拖动内部元素时调整父元素的大小。 (jqueryUI可拖拽)
当#right
元素被拖拽时,我想调整它的父元素大小。我的例子工作不正确,我没有理解为什么。任何提示如何解决它?
为了以防万一,我在这里要做的是创建一个类似于this one的可调整大小的滚动条。但现在,我只对正确的元素感兴趣。
jsfiddle example拖动内部元素时调整父元素的大小。 (jqueryUI可拖拽)
当#right
元素被拖拽时,我想调整它的父元素大小。我的例子工作不正确,我没有理解为什么。任何提示如何解决它?
为了以防万一,我在这里要做的是创建一个类似于this one的可调整大小的滚动条。但现在,我只对正确的元素感兴趣。
最简单的解决方法如下(注意#left和在SCSS #right的变化):
SCSS:
#container {
width: 500px;
height: 100px;
background: #f9f9f9;
}
#nav {
width: 100px;
height: 100px;
background: #e9e9e9;
cursor: move;
}
#left {
width: 10px;
height: 100px;
position: absolute;
top:0;
left:0px;
background: #a9a9a9;
cursor: w-resize;
&:hover {
background: #999;
}
}
#right {
width: 10px;
height: 100px;
position:absolute;
top:0;
right:0px;
background: #a9a9a9;
cursor: e-resize;
&:hover {
background: #999;
}
}
的JavaScript:
var cont = $("#container")
var nav = $("#nav")
var left = $("#left")
var right = $("#right")
nav.draggable({
containment: cont
});
right.draggable({
containment: cont,
drag: function(e, ui) {
nav.width(ui.position.left);
}
});
唯一的问题是你让你的JavaScript太花哨。 ui.position.left提供了您需要的所有信息。我所做的只是将内容从浮动状态改为立场:绝对;
嗯,这看起来不错。没有考虑首先改变CSS。 – 2013-03-26 19:30:45
哦,你<3你奉承我*腮红*但一切认真:谢谢! – 2013-03-26 19:31:56
您可以使用好醇”纯JavaScript做
http://jsfiddle.net/DerekL/cCvGD/
var oriX = 0,
oriW = 0,
mousedown = false;
right.mousedown(function (e) {
oriX = $(this).offset().left; //store the initial x and width
oriW = nav.width();
mousedown = true; //mousedown sets to true
e.stopPropagation(); //prevent nav from being dragged
})
$(window).mousemove(function (e) {
if(mousedown == true) { //only when mouse is down (dragging)
nav.width(oriW + (e.clientX - oriX)); //calculate the width
}
}).mouseup(function() {
mousedown = false; //mousedown sets to false
});
你绝对可以在这里使用jQuery。有一个解决方案。 – 2013-03-26 19:22:50
@GrahamRobertson - 当然你可以,但这样做可能很麻烦,因为'draggable'似乎依赖于父元素的大小。 – 2013-03-26 19:25:07
查看我提供的答案。可拖动表示相对于其内部容器的位置。它只需要将右侧和左侧元素更改为位置:绝对;而不是浮动并简化JavaScript以将宽度更改为ui.position.left所处的位置。 – 2013-03-26 19:28:41
的问题是,你正在改变你的资产净值的宽度集装箱,这是搬出权利元素。所以,当你拖动它时,它会移动两次。
就可以得到解决这个问题由dragable方法重置权元素的位置
right.draggable({
containment: cont,
drag: function(e, ui){
dragged = ui.position.left;
nav.width(originNavWidth + dragged);
ui.position.left = nav.position.left;
}
})
当'nav'的宽度比它大时,它不起作用。 – 2013-03-26 19:12:41
对,这仍然存在每次拖动都会重置为原始宽度的问题。似乎格雷厄姆有更改CSS不使用浮动的答案。 – Nate 2013-03-26 19:51:42
看起来非常像draggable的行为取决于父级的维度,并且它不喜欢项目的父级在中途调整大小。 – techfoobar 2013-03-26 18:53:08