0

我有一个垂直<ul>列表,其中包含draggable附加了 jQuery 事件处理的项目。当拖动任何列表项时,所有列表项都将被拖动并在拖动时呈现。

问题:我的helper函数在不正确的垂直位置呈现被拖动的项目,除非最上面的列表项目是被拖动的项目(即用鼠标按钮单击并拖动)。这是因为我不知道拖动项的垂直位置。如果我知道,我可以设置cursorAt top属性来抵消它。

伪代码:

$(list items).draggable({
    cursorAt: {
       cursor: "crosshair",
       left: 5,
       top: ? // need to know vertical position of dragged item here...
    },

所以我的问题是,有没有办法找到被拖动项目的垂直位置?

4

1 回答 1

1

尝试了很多方法将点击位置变为top属性,但它不起作用。

所以我想出了一个解决方法。我没有用偏移可拖动对象cursorAt,而是使用 CSS hack(使用margin-top)来移动拖动时呈现的内容(由helper函数设置):

 helper: function(e, ui) {
        var compensateUp = e.pageY;
        var helperHtml='<ul style="margin-top:-' + compensateUp + 'px;">';
        ...

在所有主要浏览器中都像魅力一样工作。

于 2012-04-24T09:35:36.690 回答