19

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

分区排列

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

如果可能的话,我宁愿坚持使用香草 JQuery 而不是依赖 JQuery UI。

4

5 回答 5

14

我想这就是你要找的

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

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

HTML:

<div class="parent">
    <div class="child"></div>
</div>

CSS:

.parent {
    position: relative;
    width: 800px;
    height: 500px;
    background: #000;
}
.child {
    position: absolute;
   right: 0;
    top: 0;
    width: 200px;
    height: 100%;        
    background: #ccc;
}

JS:

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

检查这个JSFiddle

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

于 2013-07-25T10:56:17.840 回答
10

可以这么说,使用 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>

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;
    });
});

JSFiddle

于 2013-07-25T11:09:53.267 回答
3

如评论中所述,使用 jQuery UI Resizable 交互。看看这个例子:http: //jqueryui.com/resizable/#max-min

编辑: 要将其锁定为仅调整宽度,请将 minHeight 设置为等于 maxHeight。那应该就可以了。

上面示例中的代码:

$(function() {
  $( "#resizable" ).resizable({
    minHeight: 250,
    maxHeight: 250,
    minWidth: 200,
    maxWidth: 350
  });
});

编辑 2: 对于应用处理任何不同的方式:阅读文档http://api.jqueryui.com/resizable/#option-handles

于 2013-07-25T10:46:10.303 回答
1

试试这个代码..

$('.child').resizable({
    handles: 'w'
});

然后您可以添加最大和最小宽度

于 2013-07-25T10:55:44.830 回答
0

您还可以附加一个事件处理程序,如下所示,如果您想在调整大小的开始或结束时执行某些操作,这很有用。

$("#resizeableElementId").resizable({handles: 'n,w,s,e', minWidth: 200, maxWidth: 600}); 

$("#resizeableElementId").on( "resizestop", function( event, ui ) {

    console.log('resize ended');
    console.dir(event);

});

请记住,您还需要包含 jQuery UI;下载它并添加如下内容:

<link rel="stylesheet" type="text/css" href="jquery-ui-1.11.1.custom/jquery-ui.min.css" />
于 2014-09-22T10:35:25.317 回答