如何使div宽度可拖动?

QFD*_*Dev 17 css jquery jquery-ui draggable resizable

我有一个div嵌套在另一个div中,用于显示设置控制台.嵌套div有一个固定位于父级内部,如下所示:

分区安排

我想为子div的左边框添加一个可拖动的句柄,以便可以在宽度上调整子div的大小.我是否需要添加另一个非常窄的div,左边框位于此处,以便可以拖动它并重新计算位置以动态调整子divs width属性的大小?

如果可能的话,我宁愿坚持使用vanilla JQuery,而不是依赖于JQuery UI.

Pra*_*een 14

我想这就是你要找的东西

handle:哪些句柄可用于调整大小.

例: $( ".selector" ).resizable({ handles: "n, e, s, w" });

HTML:

<div class="parent">
    <div class="child"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.parent {
    position: relative;
    width: 800px;
    height: 500px;
    background: #000;
}
.child {
    position: absolute;
   right: 0;
    top: 0;
    width: 200px;
    height: 100%;        
    background: #ccc;
}
Run Code Online (Sandbox Code Playgroud)

JS:

$('.child').resizable({
    handles: 'n,w,s,e',
    minWidth: 200,
    maxWidth: 400
});
Run Code Online (Sandbox Code Playgroud)

检查这个JSFiddle

编辑:解决了CSS问题,更新了小提琴


Aus*_*rst 9

使用vanilla jQuery可以很容易地实现这一点.我建议使用更高效的标记布局,否则您将遇到一些相对位置/大小问题.

我会用一个容器和两个孩子.在其中一个孩子(第二个或右侧)将包含一个透明但宽度较小的手柄.对于jQuery,您只需将鼠标按下事件附加到该句柄,并相应地调整其他子项的大小.这大致是看起来如何.

HTML

<div id="container">
    <!-- Left side -->
    <div id="left"> This is the left side's content! </div>
    <!-- Right side -->
    <div id="right">
        <!-- Actual resize handle -->
        <div id="handle"></div> This is the right side's content!
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var isResizing = false,
    lastDownX = 0;

$(function () {
    var container = $('#container'),
        left = $('#left'),
        right = $('#right'),
        handle = $('#handle');

    handle.on('mousedown', function (e) {
        isResizing = true;
        lastDownX = e.clientX;
    });

    $(document).on('mousemove', function (e) {
        // we don't want to do anything if we aren't resizing.
        if (!isResizing) 
            return;

        var offsetRight = container.width() - (e.clientX - container.offset().left);

        left.css('right', offsetRight);
        right.css('width', offsetRight);
    }).on('mouseup', function (e) {
        // stop resizing
        isResizing = false;
    });
});
Run Code Online (Sandbox Code Playgroud)

的jsfiddle