jQuery Sortable List でアイテムが上に飛んでずれてしまう。
文章だと説明が難しいですが、ドラッグをしてsortable listのアイテムを掴むと、本来であればカーソルにくっついてくるはずのアイテムが、だいぶ上の方に飛んでいってしまいます。
長いリストの場合、ページ下の方のアイテムは、へたすると見えない位置に行ってしまいます。
これでは使いにくという事で、改修すべく調べました。
アイテムがずれると検索すると、親要素にposition: relative;とオプションappendToで解決できる記事がヒットしましたが、
それでは解決できなかったので、別の方法をメモしておきます。
一度その方法を試してみる事もおすすめします。
結論、CSSでoverflow:auto;を使う
親要素にoverflow: auto;を追加してあげます。
https://code.i-harness.com/ja-jp/q/1a7acc
overflow: auto;
追加するだけですoverflow: auto;
親(ul、#element、whatever_you_call_it)に渡すと、うまくいくはずです。 これにより、ドキュメントの高さがわずかに変わっても、サイズ変更時にオーバーフローオートが要素の高さを保持することが保証されます。
今回はリストが長かったため(スクロールが必要な長さ)、高さがうまく取得できていないような振る舞いでした。
ですので、引用元にあるように親要素にoverflow: auto;を追加して上げたところ….、きれいに改修できました。
<ul id="sortable" style="overflow: auto;">
<li>アイテム1</li>
<li>アイテム2</li>
<li>アイテム3</li>
</ul>
ついでに、ドラッグできる方法を制限してあげると自然でした。
$('#sortable').sortable({
axis:"y"
});