2013-03-26 162 views
4

jsfiddle example拖動內部元素時調整父元素的大小。 (jqueryUI可拖拽)

#right元素被拖拽時,我想調整它的父元素大小。我的例子工作不正確,我沒有理解爲什麼。任何提示如何解決它?

爲了以防萬一,我在這裏要做的是創建一個類似於this one的可調整大小的滾動條。但現在,我只對正確的元素感興趣。

+0

看起來非常像draggable的行爲取決於父級的維度,並且它不喜歡項目的父級在中途調整大小。 – techfoobar 2013-03-26 18:53:08

回答

3

最簡單的解決方法如下(注意#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提供了您需要的所有信息。我所做的只是將內容從浮動狀態改爲立場:絕對;

+0

嗯,這看起來不錯。沒有考慮首先改變CSS。 – 2013-03-26 19:30:45

+0

哦,你<3你奉承我*腮紅*但一切認真:謝謝! – 2013-03-26 19:31:56

2

您可以使用好醇」純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 
}); 

左,右:http://jsfiddle.net/DerekL/cCvGD/1/

+0

你絕對可以在這裏使用jQuery。有一個解決方案。 – 2013-03-26 19:22:50

+0

@GrahamRobertson - 當然你可以,但這樣做可能很麻煩,因爲'draggable'似乎依賴於父元素的大小。 – 2013-03-26 19:25:07

+0

查看我提供的答案。可拖動表示相對於其內部容器的位置。它只需要將右側和左側元素更改爲位置:絕對;而不是浮動並簡化JavaScript以將寬度更改爲ui.position.left所處的位置。 – 2013-03-26 19:28:41

1

的問題是,你正在改變你的資產淨值的寬度集裝箱,這是搬出權利元素。所以,當你拖動它時,它會移動兩次。

就可以得到解決這個問題由dragable方法重置元素的位置

right.draggable({ 
    containment: cont, 
    drag: function(e, ui){ 
     dragged = ui.position.left; 
     nav.width(originNavWidth + dragged); 
     ui.position.left = nav.position.left; 
    } 
}) 

見:http://jsfiddle.net/vf4eS

+0

當'nav'的寬度比它大時,它不起作用。 – 2013-03-26 19:12:41

+0

對,這仍然存在每次拖動都會重置爲原始寬度的問題。似乎格雷厄姆有更改CSS不使用浮動的答案。 – Nate 2013-03-26 19:51:42

相關問題