jQuery UI 可拖动,具有绝对位置和底部属性

Posted

技术标签:

【中文标题】jQuery UI 可拖动,具有绝对位置和底部属性【英文标题】:jQuery UI draggable with absolute position and bottom property 【发布时间】:2013-06-22 09:12:27 【问题描述】:

我正在使用 jQuery UI 创建一个可拖动的<div><div> 使用 CSS 绝对定位在右下角或左上角:

.dragbox 
    position: absolute;
    width: 140px;
    min-height: 140px; /* I need to use min-height */
    border: 3px solid black;
    padding: 10px;

.bottom 
    bottom: 5px; /* causes box to resize when dragged */
    right: 5px;

.top 
    top: 5px; /* does not cause box to resize */
    left: 5px;

html 如下所示:

<div class="dragbox bottom">
    Bottom Box :(
</div>
<div class="dragbox top">
    Top Box :)
</div>

javascript$('.dragbox').draggable(); 以使 &lt;div&gt; 元素可拖动。左上角的&lt;div&gt; 按预期工作,但右下角的&lt;div&gt; 在拖动时会调整大小。如果我将.dragboxmin-height 属性更改为height,我会看到两个框的预期行为,但我需要为此使用min-height,因为我不知道内部内容的长度。

如何将&lt;div&gt; 定位在右下角并启用拖动而不在拖动时调整&lt;div&gt; 的大小?左上角和右下角 &lt;div&gt; 元素的行为方式应该相同。

DEMO(我使用 Chrome 27 和 Safari 6)

【问题讨论】:

【参考方案1】:

jQuery 的可拖动通过操纵 css topleft 值来工作。当一个盒子同时设置了 topbottom 值(并且没有静态高度)时,盒子将拉伸以匹配这两个属性。这就是导致调整大小的原因。

一种解决方法是在盒子上设置一个静态高度,或者如果这不是一个选项,则在创建可拖动对象时将底部值设置为“自动”,同时获取当前的“顶部”位置以确保元素保持原样。

$('.dragbox').draggable(
    create: function( event, ui ) 
        $(this).css(
            top: $(this).position().top,
            bottom: "auto"
        );
    
);

http://jsfiddle.net/expqj/8/

【讨论】:

使用这个想法,我能够解决我的情况,即盒子还有一个动态高度(并且应该向上增长),但幸运的是它在拖动过程中没有改变。我也这样做,但使用“开始”和“停止”选项,以便在拖动开始时将顶部属性设置为锚点(自动底部),并在拖动结束时将它们交换回来。【参考方案2】:

@xec 给了我主要的想法,我用这种方式改变了它,它对我有用;

 jQuery("#container").draggable(
                    start: function (event, ui) 
                        $(this).css(
                            right: "auto",
                            top: "auto"
                        );
                    
                );

【讨论】:

【参考方案3】:

对我来说,以这种方式工作(对于我的底部,左侧绝对定位的 div):

        $("#topBarUpDownDiv").draggable( axis: "x",
            stop: function( event, ui ) 
                var elem=$(this)[0];
                $(elem).css( bottom: $(this).position().bottom, top: "auto" );
           
        );

【讨论】:

以上是关于jQuery UI 可拖动,具有绝对位置和底部属性的主要内容,如果未能解决你的问题,请参考以下文章

滚动浏览器时使用错误起始位置的可拖动 jQuery UI 元素?

jQuery UI 可拖动在我的可拖动 div 上设置“位置:相对”

可拖动的 Jquery 不适用于包含

JQuery-UI可拖动重置到原始位置

jQuery UI 可拖动位置不刷新?

如何根据条件恢复可拖动的jquery UI的位置