jQuery ui:可拖动,如何确定图像在 x 轴上移动了多少?

Posted

技术标签:

【中文标题】jQuery ui:可拖动,如何确定图像在 x 轴上移动了多少?【英文标题】:jQuery ui: Draggable, How do I determin how much on the x-axis an image was moved ? 【发布时间】:2011-12-29 21:08:22 【问题描述】:

我在 div 中有一个图像,如下所示:

<div><img src="" class="draggable"></div>

这是一个可拖动的图像,通过 jQuery UI。现在我想确定图像在 x 轴上移动了多少,所以我可以使用该信息来保存图像的位置。

I.E.如果图像向左移动 100px,x 应该是“-100px”,如果它向右移动它应该是“100px”..

我可以使用它,但它只能确定图像移动了多少,而不是特定方向:

drag: function() 
                counts[ 1 ]++;
                updateCounterStatus( $drag_counter, counts[ 1 ] );
            ,

解决办法是什么?

谢谢, 雅各布

【问题讨论】:

【参考方案1】:

简单,如果您想在停止拖动图像时保存图像位置。只需在停止时检查图像的左侧和顶部:

stop: function(event, ui)  
    var topValue = $(this).position().top;
    var leftValue = $(this).position().left;
    //Save them to wherever you want

jQuery UI 的 draggable 并没有做任何神奇的事情,如果你在 Firebug 或 Chrome Dev Toolbar 中检查它,你会发现它所做的只是改变元素的 left 和 top 属性。

有关 Draggable 的不同事件的更多信息:http://jqueryui.com/demos/draggable/#events

【讨论】:

您应该使用.offset().top.offset().left 来检索位置,而不是CSS 属性,这可能并不存在于所有DOM 元素上。 视情况而定,如果您将 offset() 值持久存储并在 jquery 演示中重新创建它们,您会注意到该框被放置在错误的位置。但我同意你的看法,应该使用 offset() 或 position() 以更合适的方式获取值。【参考方案2】:

我会在 start 时存储起始位置并在 stop 时计算差异,如下所示:

http://jsfiddle.net/FMC56/1

$( "#drag" ).draggable(
    start: function(event, ui) 
        $(this).data("startx",$(this).offset().left)
    ,
    stop: function(event, ui) 
        var change = $(this).offset().left - $(this).data("startx");
        this.innerhtml = "change: " + change + "px";
    
);

编辑:顺便说一句,使用数据是 mblase75 的想法。

【讨论】:

OP 没有要求它,但确定移动的总距离(而不仅仅是 x 距离)就像使用勾股定理一样容易。 另外,如果 OP 使用多个可拖动对象,全局变量将无法正常工作,但数字可以存储为 DIV 本身的.data 属性。

以上是关于jQuery ui:可拖动,如何确定图像在 x 轴上移动了多少?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery ui div在拖放时不可拖动

Jquery 使克隆图像可拖动和调整大小

如何使用固定的 X 和 Y 轴使 jQuery 可拖动?

可拖动 | jQuery 用户界面。如何在拖动事件上添加类

jQuery UI可拖动分屏

jquery UI可拖动:在容器内水平拖动溢出:滚动?