如何使这个可调整大小的 div 从边缘可调整大小?

5
我有一个可以调整大小和拖动的方框(灰色)。这个方框目前只能通过拉伸角落来进行调整大小。我想从边缘也能调整它的大小。从角落拉伸会让它在宽度和高度上均匀缩放。然而,沿着一条边缩放将仅沿着长度缩放。在另一边缩放它将仅沿着宽度缩放。我该如何实现这一点?
我的代码在这里。http://jsfiddle.net/akashdmukherjee/sa44ks9u/4/ HTML:
  <div id="outer" style="background-color: yellow; width: 600px; height: 400px; margin-left: 40px; margin-top: 50px;">


        <div class="draggable_div rot">
            <div class="rotatable">
                <div id="inner" class="resizable" style="background-color: #3C3C3C; width: 300px; height: 300px;">
                </div>
            </div>
        </div>

  </div>

  <div id="x_and_y_of_inner">Left: , Right: </div>

JS:

    $('.draggable_div').draggable();


    $( ".draggable_div" ).draggable({
      drag: function( event, ui ) {

        var left_most_cordinates = $("#outer").offset().left;
        var top_most_cordinates = $("#outer").offset().top;

        $("#x_and_y_of_inner").text( "Left: " + left_most_cordinates + " Top: " + top_most_cordinates );

        ui.position.left = Math.min( left_most_cordinates, ui.position.left );
        ui.position.top = Math.min( top_most_cordinates, ui.position.top );
      }
    });

    $('.resizable').resizable({
        aspectRatio: true,
        handles: 'ne, se, sw, nw'
    });



    $(document).on('mouseover', '.rot', function(){
        var tc = $(this);
        tc.rotatable({
            handle:tc.children('.rotate.left, .rotate.right')
        });
        return true;
    });

CSS:

.draggable_div
{
    position: relative; 
    display: -moz-inline-stack;
    display: inline-block;
    vertical-align: top;
    zoom: 1;
    *display: inline;   

    cursor: hand; 
    cursor: pointer;       
}

.resizable
{
    width: 50%;   
    border: 1px solid #bb0000;   
}
.resizable img
{
    width: 100%;   
}

.ui-resizable-handle 
{
    background: #f5dc58;
    border: 1px solid #FFF;
    width: 9px;
    height: 9px;

    z-index: 2;
}
.ui-resizable-se
{
    right: -5px;
    bottom: -5px;
}

.ui-rotatable-handle 
{
    background: #f5dc58;
    border: 1px solid #FFF;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -o-border-radius: 5px;
    -webkit-border-radius: 5px;
    cursor: pointer;

    height:        10px;
    left:          50%;
    margin:        0 0 0 -5px;
    position:      absolute;
    top:           -5px;
    width:         10px;
}
.ui-rotatable-handle.ui-draggable-dragging
{
    visibility:  hidden;
}
4个回答

6

如果您想保持宽高比,那么您就不能做到这一点。因此,当您从resizable中移除该选项时,您可以使用角落来按照您的要求在任何方向上拖动并在高度和宽度方面进行缩放。

$('.resizable').resizable({
    //aspectRatio: true, //comment or remove this
    handles: 'ne, se, sw, nw'
});

DEMO


好的。这很棒。但是我该如何让调整大小的光标在鼠标悬停在边缘时显示出来呢? - user3422637
1
你需要添加更多的样式来指定所有边缘的cursor并处理它们。请查看此**2个边缘 - 右侧和顶部的演示**。 - Guruprasad J Rao

1

只需使用CSS属性resize和overflow:

div
{
    resize: both;
    overflow: auto;
}

CSS 的 resize 属性不被 IE 或 Edge 支持。caniuse resize - Self Evident

1

尝试这段代码,我在其中从其边缘进行调整大小:

HTML

<div id='resizeDiv'><div id='handle' class="ui-resizable-handle ui-resizable-s"></div>
</div>

CSS

#resizeDiv {
    margin: 20px;
    width: 100px;
    height: 100px;
    border: 1px solid #CCC;
    background-color: #FAFAFA;

}

#handle {
    width: 100px;
    height: 10px;
    background-color: gray;
}

js

$(function() {
        $( "#resizeDiv" ).resizable({handles: {'s': '#handle'}});
    });

点击这里进入JSfiddle...


1

简单点做,不用用 JavaScript 让自己变得复杂。通常越简单就越能保证在所有浏览器上工作。 有时候,“少即是多” 只需在 CSS 中使用此代码,它就能正常工作。

.divName {
    resize: both;
    overflow: auto;
} 

您还可以使用resize:horizontal;resize:vertical;resize:none; 例如,如果您只想要垂直调整大小而不是水平调整大小:
.divName {
    resize: vertical;
    overflow: auto;
} 

CSS 调整大小在 IE 或 Edge 上不受支持。caniuse resize - Self Evident

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接