I have a problem with a jQuery UI 1.7.2 sortable list in Firefox 3.6, IE7-8 work fine. When I'm scrolled down a bit, the helper element seems to have an offset of the same height that I'm scrolled down from the mouse pointer which makes it impossible to see which item you originally started dragging. How do I fix this or work around the issue? If there is no fix what is a really good alternative drag-able plugin?
Here are my initialization parameters for the sortable.
$("#sortable").sortable( {placeholder: 'ui-state-highlight' } );
$("#sortable").disableSelection();
Had the same problem. In my case it wasnt possible to use the "overflow:auto"-fix. So this is what I did.
The fix doesn't care about what browser you are using. It will always make sure that the helper has the same y-offset as the target when the drag starts.
For future readers I ran into a similar problem where the helper element has an offset when dragging inside the scrolled div of a bootstrap dialog. When releasing the dragged object, the animation sends the dragged helper element towards it's new position without considering the scrolled portion of the page, which gives a confusing feedback to users.
In order to keep things working with position:relative and overflow-y:auto in the dialog container, my solution was
1- Add the scrollTop() offset to the margin-top on the helper object in the sort start event;
2- remove the margin-top in the beforeStop event
This fixed the animation from being off after draging, but the helper object is pushed below the cursor while dragging in the scrolled portion in the page. The last fix is
3- Calculate and set the top property of the helper object while dragging (using the sort event) relative to the pointer and the container offset.
});
Help this helps
Using
overflow: auto;
was not an option for me. I was able to work around this issue with thissort
event handler:It is not perfect, but it doesn't require browser sniffing. Tested in IE8, Chrome and Firefox.
Edit: This is using jQuery 1.10.0 and jQuery UI 1.10.3.
I was seeing this issue and was able to solve it by removing the css rule position:relative from one of the containing divs on my page. See also: http://forum.jquery.com/topic/sortable-offset-when-element-is-dragged-and-page-scrolled-down-ff
If you want to prevent browser sniffing, the CSS only solution is to set the ul or a container style to
overflow: auto
. If you look at the source through firebug, it's the way jQuery does it in their example.