4

jQuery: 1.9.1

jQuery UI: 1.10.1

フィドルを見てください

            <td class="my-column" >
                <div id="my-div1" class="my-div-class">
                    <p class="para-item"> para 101 </p>
                </div>
            </td>
            <td>
                <div id="my-div1" class="my-div-class">
                    <p class="para-item"> para 201 </p>
                </div>
            </td>

<script>
    $(".my-div-class").sortable( { connectWith: '.my-div-class' } );
</script>

フィドルでは、ユーザーがリスト 1 の一番上の項目をリスト 2 の一番下にドラッグしようとすると、リスト 2 のスクロール バーではなくリスト 1 のスクロール バーが移動します。

いろいろ試してみましたが、うまく動作しませんでした。入力/提案は大歓迎です。

ありがとう、ラケシュ

4

4 に答える 4

1

より簡単な解決策は、次のコードです。

$("#foo, #bar").sortable({
  connectWith: ".foobar",
  over: function(event, ui) {
    if (ui.sender) {
      widget = ui.sender.data("ui-sortable");
      widget.scrollParent = $(this);
      widget.overflowOffset = $(this).offset();
    }
  }
});
于 2016-06-21T12:21:26.967 に答える
1

jquery.ui.sortable.js の _mouseDrag 関数を見ると、 //スクロールは、親がドラッグされた要素のコンテナである scrollParent で行われます。ただし、親は、ドロップしようとしている場所のコンテナーである必要があります。スクロールの変更を this._contactContainers(event); の下に移動しました。this.scrollParent[0] の代わりに。私は this.currentContainer.element[0] を使用して、実際のコンテナを提供し、機能しました..

if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
   this.overflowOffset = this.currentContainer.element.offset();
   var scrollContailer = this.currentContainer.element[0];
   if((this.overflowOffset.top + scrollContailer.offsetHeight) - event.pageY < o.scrollSensitivity) {
    scrollContailer.scrollTop = scrolled = scrollContailer.scrollTop + o.scrollSpeed;
   } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
    scrollContailer.scrollTop = scrolled = scrollContailer.scrollTop - o.scrollSpeed;
   }
   if((this.overflowOffset.left + scrollContailer.offsetWidth) - event.pageX < o.scrollSensitivity) {
    scrollContailer.scrollLeft = scrolled = scrollContailer.scrollLeft + o.scrollSpeed;
   } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
    scrollContailer.scrollLeft = scrolled = scrollContailer.scrollLeft - o.scrollSpeed;
   }

}
于 2013-06-04T07:18:51.140 に答える