Jquery UI - 可调整大小:alsoResize不准确?

时间:2011-09-30 15:54:36

标签: javascript jquery css jquery-ui resizable

好的我没有使用'alsoResize',但我已经测试过,它的行为也一样。

当你调整主元素的大小时,底部元素'marquee'的黑色边框经常与顶部元素的虚线白色边框不一致。

$(".layer").resizable({
    //alsoResize: '.marquee',
    resize: function(event, ui) {
        $('.marquee').css({
            width : ui.size.width + "px",
            height : ui.size.height + "px",
            left : ui.position.left + "px",
            top : ui.position.top + "px",
        });
    },
    handles: 'all',
    aspectRatio: true,
});

http://jsfiddle.net/digitaloutback/uGr3w/3/

在本地演示中使用firebug,在它们不合适的阶段,您可以看到左侧,顶部和宽度的内联元素样式,高度不同。

我想知道是否可以将位置和大小统计信息发送到函数,这会对两个元素都输出精确的测量结果吗?任何更简单的选择?感谢

更新

我有一个干净利落的解决方法..它是将可调整大小计算的尺寸传递给将顶层设置为这些尺寸的函数。

我确信有一种更有效的方法可以做到这一点,随时提供优化版本..

http://jsfiddle.net/digitaloutback/VDfpY/5/

2 个答案:

答案 0 :(得分:5)

ui参数报告的大小和位置与调整大小事件以及实际大小和位置之间似乎存在差异。这可能是由于构建的ui参数和被触发事件之间的延迟。

我尝试使用事件发生时报告的实际位置和大小:

        $('.marquee').css({
            'left' : $(this).position().left,
            'top' : $(this).position().top,
            'width' : $(this).width(),
            'height' : $(this).height()
        });

这似乎更符合实际尺寸。 http://jsfiddle.net/VDfpY/1/

答案 1 :(得分:3)

这个怎么样? 让CSS处理大小而不是JS http://jsfiddle.net/HerrSerker/uGr3w/5/

- 编辑添加的代码

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {

    $(".layer").resizable({
        handles: 'all',
        aspectRatio: true,
    });

});
</script>
<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/themes/redmond/jquery-ui.css" rel="stylesheet" />
<link type="text/css">
#canvas { 
    width: 500px; 
    height: 500px; 
    position: relative; 
    overflow: hidden; 
    background: #999}

.marquee {
    border: 1px dashed #fff;
    position: absolute;
    left: -1px; top: -1px;
    width: 100%; height: 100%;
    display: block;
    z-index: 2500;    
}

.layer {
    border: 1px solid black;
    position: absolute;
    left: 150px; top: 150px;
    width: 250px; height: 226px;
    display: block;
    z-index: 2501;
}

</link>
<body>
<div id="canvas">
    <a class="layer" href="#"><span class="marquee"></span></a>
</div>
</body>