拖动内部元素时调整父元素的大小。 (jqueryUI draggable)

时间:2013-03-26 18:45:42

标签: javascript jquery jquery-ui

jsfiddle example

拖动#right元素时,我想调整其父级的大小。我的例子工作不正确,我无法理解为什么。任何提示如何解决它?

以防万一,我在这里要做的是创建一个类似于this one的可调整大小的滚动条。但就目前而言,我只对正确的元素感兴趣。

3 个答案:

答案 0 :(得分:3)

最简单的解决方案如下(注意SCSS中的#left和#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拥有您需要的所有信息。我所做的只是将内容从浮动更改为位置:绝对;

答案 1 :(得分: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/

答案 2 :(得分:1)

问题在于您正在更改 nav 容器的宽度,而这正在移出 right 元素。因此,当你拖动它时,它会移动两倍。

您可以通过在可拖动方法中重置 right 元素的位置来解决此问题

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