0

我有一个使用 css 以页面为中心的 div - margin: 0 auto; 这是必不可少的

jQuery resizeable 连接到 div 以便它可以水平调整大小。

还添加了可调整大小的“网格”选项,因为在调整大小期间会触发其他函数,并且这些函数在没有激活网格选项的情况下被调用了太多次。

我还向可调整大小的 div 添加了一个 jquery 位置,以在调整大小期间使其居中,否则当您拖动左边缘时,它会失去其中心位置。

问题是鼠标向左或向右拖动 div 越宽,鼠标越远离左边缘。div 的左/右边缘应始终捕捉到鼠标位置。

ui.size.width 报告的值也远高于 div 的实际宽度。

我尝试了许多修复,但似乎没有任何效果。

这是下面带有 jsfiddle 链接的代码:

的HTML:

<div id="container">
    <div class="resize">
        Lorem
        <br/>ipsum
        <br/>dolor
        <br/>sit
        <br/>amet
        <br/>Consectetuer
        <br/>Lorem
        <br/>magna
        <br/>mi
        <br/>wisi
     </div>
</div>

<div id="width-output"></div>
<div id="ui-width-output"></div>

CSS:

#container {
    width:100%;
    background-color:#999999;
}
.resize {
    width:240px;
    margin:0 auto;
    background-color:#ccc;
    text-align:center;
}

#ui-width-output, #width-output  {
    text-align:center;
}

jQuery:

$(document).ready(function () {
    $(".resize").resizable({
        grid: [80, 80],

        handles: 'e, w',
        resize: function (event, ui) {

            ui.size.width += ui.size.width - ui.originalSize.width;

            var container =  $('#container');

            var position = $(this).position();
            var container_position = container.position();
            var top_position = position.top - container_position.top;

            var offset = 'center top+' + top_position;
            $(this).position({
                of: $(container),
                my: offset,
                at: "center top",
                collision: "fit none"
            });

            $('#width-output').html('actual width: ' +  $(this).width() );            
            $('#ui-width-output').html('ui.size.width: ' +  ui.size.width);

        }

    });
});

我创建了一个测试用例,这样所有这些都更有意义!

http://jsfiddle.net/bennyticklez/S5tN8/51/

提前致谢。

4

2 回答 2

3

ui.size.width += ui.size.width - ui.originalSize.width;给你一半你需要的东西。如果您将更改加倍以适应每一方,这可能会有所帮助,更像是:

$(".resize").resizable({
    grid: [80, 80],
    handles: 'e, w',
    resize: function(event, ui) {
        var newWidth = ui.originalSize.width+((ui.size.width - ui.originalSize.width)*2);
        $(this).width(newWidth).position({
            of: $("#container"),
            my: "center center",
            at: "center center"
        });
    }
});

我做了一个小提琴:http: //jsfiddle.net/filever10/fYQ58/

虽然我也找到了这个,所以你用它的方式来做你想做的事:http: //jsfiddle.net/xhAU4/2/

于 2013-12-11T14:19:06.830 回答
0

有点hack,但是写了一个小函数来做一个非常简单的计算来保持位置居中。为简单起见,可旋转元素位于父元素中。

HTML:

<div id="container">
    <div id="resize-me"></div>
</div>

JS:

$( '#resize-me' ).resizable 
    (   {
            handles:        {   'se': '#resize-handle'  },
            aspectRatio:    true,
            resize:         function(){ positionObject( $( this ) );    }
    }   );

function    positionObject( resizeElement )
{
    resizeElement.css( 'left', ( resizeElement.css( 'width' ).replace( 'px', '' ) / -2 ) );
    resizeElement.css( 'top', ( resizeElement.css( 'height' ).replace( 'px', '' ) / -2 ) );

    // console.log(resizeElement.css( 'left' ) );
    // console.log(resizeElement.css( 'top' ) );
}
于 2016-02-17T15:09:12.813 回答