コンテナ内のdivをスクロールすると.sortable()
、スクロールバーを離したときにdivのドラッグが開始されます
フィドルには、3つの異なる並べ替え可能要素があり、そのうちの1つはスクロールするものです。
バグ:スクロールバーをクリックして上下にドラッグし、コンテンツをスクロールします。マウスを離すと、divがドラッグを開始します。これにより、マウスを追いかけ、ページを更新せずにスティックを解除する方法がありません。
コンテナ内のdivをスクロールすると.sortable()
、スクロールバーを離したときにdivのドラッグが開始されます
フィドルには、3つの異なる並べ替え可能要素があり、そのうちの1つはスクロールするものです。
バグ:スクロールバーをクリックして上下にドラッグし、コンテンツをスクロールします。マウスを離すと、divがドラッグを開始します。これにより、マウスを追いかけ、ページを更新せずにスティックを解除する方法がありません。
.mousemove
次のように jquery のイベントを使用できます。
$('#sortable div').mousemove(function(e) {
width = $(this).width();
limit = width - 20;
if(e.offsetX < width && e.offsetX > limit)
$('#sortable').sortable("disable");
else
$('#sortable').sortable("enable");
});
ここで動作するフィドルを作成しましたhttp://jsfiddle.net/aanred/FNzEF/。それがあなたのニーズを満たすことを願っています。
sortable()
と同じように、ハンドルのセレクターを指定できますdraggable()
。次に、一致した要素のみがクリック イベントを取得します。次のようにハンドル セレクターを指定します。
$('#sortable').sortable( {handle : '.handle'});
残りのために必要なものは、すでにほとんど揃っています。オーバーフロー要素の内側の div は、次のように適切なハンドルを作成します。
<div style="height: 200px;overflow:auto">
<div class="handle" style="height: 300;">
blah
blah
blah
次に、他のすべてのソート可能性を復元する必要があります。これらの div にクラスを与えることができると思うかもしれませんがhandle
、それは子を探しているので、次のようにすべてをラップする必要があります。
<div><div class="handle">asadf</div></div>
SubRedの回答への補足:
これは私のニーズに完全に対応しました。ただし、(上記のように) スクロールバーの幅が 20 ピクセルであることに依存するのではなく、次のコードを使用しました。
ブラウザのスクロールバーのサイズを取得するにはどうすればよいですか?
これにより、コードはさまざまなセットアップでさまざまなスクロールバー幅を処理できます。便宜上、コードをここに貼り付けます。
function getScrollBarWidth ()
{
var inner = document.createElement('p');
inner.style.width = "100%";
inner.style.height = "200px";
var outer = document.createElement('div');
outer.style.position = "absolute";
outer.style.top = "0px";
outer.style.left = "0px";
outer.style.visibility = "hidden";
outer.style.width = "200px";
outer.style.height = "150px";
outer.style.overflow = "hidden";
outer.appendChild (inner);
document.body.appendChild (outer);
var w1 = inner.offsetWidth;
outer.style.overflow = 'scroll';
var w2 = inner.offsetWidth;
if (w1 == w2) w2 = outer.clientWidth;
document.body.removeChild (outer);
return (w1 - w2);
}
また、スクロールバーの高さに幅の値を使用し、それに合わせて SubRed のコードを修正しました。これは、1 つまたは両方のスクロールバーで機能するようになりました。
次のコードも使用しました。
jQueryを使用してDIV内のスクロールバーの存在を検出していますか?
いずれかのスクロール バーの存在を判断し、それに応じて並べ替え可能なコードのオン/オフを調整します。
どうもありがとう。