10

ドラッグ アンド ドロップの問題に直面しています。

ドラッグしている要素を常に表示したいのですが、特定の div をスクロールして、テーブルの任意のセルに要素をドロップできるようにしたいと考えています。また、任意の div から任意の div に要素をドラッグできるようにしたいと考えています。

この例はほとんど問題なく動作します。私の最後の問題は、セルhoverClassプロパティに関するものです。「コンテナ B」の境界近くにある「コンテナ A」から要素をドラッグするときに、テーブル内を移動してセルに到達する自動スクロール動作を実装しました。ただし、スクロール シミュレーションの後、hoverClass右のセルには適用されません。ただし、要素は常に右のセルにドロップされます。

https://jsfiddle.net/Bouillou/QvRjL/434/

私のアプローチは正しいですか?

編集

回避策を見つけました。アイデアは、ヘルパー構築コールバック中に要素のクローンをスクロール可能なコンテナーに追加し、1ms 後に setTimeout 関数を使用してヘルパーを本体に追加することです。オフセットの問題を回避するには、ヘルパーの位置をマウスの位置にマッピングする必要があります。

これが私の最終的な解決策です: https://jsfiddle.net/Bouillou/QvRjL/434/

そのための最善の方法を開発することは可能だと確信しています。

4

2 に答える 2

5

どうやら私のアップデートが唯一の解決策です。

何ヶ月も問題なく動作しています。

回避策を見つけました。アイデアは、ヘルパー構築コールバック中に要素のクローンをスクロール可能なコンテナーに追加し、1 ミリ秒後に setTimeout 関数を使用してヘルパーを本体に追加することです。オフセットの問題を回避するには、ヘルパーの位置をマウスの位置にマッピングする必要があります。

これが私の解決策です: http://jsfiddle.net/QvRjL/134/

$('[id^="drag-"]').each(function() {
    $(this).draggable({
        opacity: 0.7,
        cursorAt: { top: 15, left: 50 },
        appendTo: 'body',
        containment: 'body',        
        scroll: true,
        helper: function(){ 
            //Hack to append the cartridge to the body (visible above others divs), 
            //but still bellonging to the scrollable container  
            $('#container').append('<div id="clone" class="cartridge">' + $(this).html() + '</div>');   
            $("#clone").hide();
            setTimeout(function(){
                $('#clone').appendTo('body'); 
                $("#clone").show();
            },1);
            return $("#clone");
        }    
    });
});​
于 2012-12-25T08:36:44.030 に答える
0

私が正しく理解していれば、スクロールした後、ハイライトされたセルは正しいセルではありません..

コンテナ要素から強調表示するセルを計算しますが、テーブル要素内の位置を複製するようです。

基本的に、「container2」からのマウスのオフセットをチェックし、オフセットでセルを強調表示しますが、テーブルの「t」位置からです。

チャンスをつかんで、オフセットの代わりに位置を使用してください。http://api.jquery.com/offset/で言及されています。

.offset() メソッドを使用すると、ドキュメントに対する要素の現在の位置を取得できます。これを .position() と比較してください。これは、オフセットの親に対する現在の位置を取得します。

個人的には、css クラスをセルに適用し、css:hover を使用するだけです。/編集: それを行う必要がある唯一の理由がセルを強調表示することである場合..おそらく他のものもトリガーしたい.

于 2012-10-19T21:35:19.843 に答える