为什么这段代码会破坏 jquery UI 拖动&滴(含同位素)

发布于 2024-11-28 12:17:13 字数 1414 浏览 1 评论 0原文

我有一个带有项目网格的页面。这些项目中的每一个都可以拖到四个 div 之一上并添加到该 div 中。这是使用 jQuery 和 JQuery UI 可拖放来完成的。

第一个同位素项可以拖到任何 div 上。然而,第二和第二个第三个同位素项目无法识别第一个可放置的 div,但当拖动到第二个可放置的 div 上时,将被添加到第一个可放置的 div 中。

第四次和第四次第 5 个可拖动项目(同位素)无法识别第一个或第二个可放置 div,但当拖动到第 3 个可放置项上时,会添加到第二个可放置项。

因此,不知何故,可掉落物品对于物品掉落的位置感到困惑。

当我注释掉以下代码时,拖放工作正常。关于为什么这段代码会影响可放置区域的任何想法?

jQuery('div.container').isotope({
 itemSelector: 'div.sub-item', 
 resizesContainer : false,
 layoutMode : 'fitColumns',
 getSortData :{ 
   fitOrder : function ($item){
    var order, 
       index = $item.index();
       if($item.hasClass('sub-item-big') && index % 2) {
            order = index +1.5;
            } else {
            order = index;
            }
        return order;
       }
   },
 sortBy : 'fitOrder'
});

--------------- 更新 ------------------

经过一番尝试后,我决定添加“销毁”开始拖动时的同位素。

  jQuery('div.sub-item').draggable({
         helper: function(){
                jQuery('div.container').isotope('destroy');
                return jQuery(this).clone().appendTo('body');
          }
    })

当我以这种方式运行时,这些项目将被放入正确的容器中。

同位素文档说它们是“删除”功能,但有两个问题。

1)文档说它删除了“从同位素小部件和DOM中指定的项目元素”,但我不想从小部件或DOM中删除该项目,我只想删除同位素功能

2)我得到错误“无法在初始化之前调用同位素方法,尝试调用方法删除” - 但在这种情况下,同位素已初始化,但可能不在被克隆的对象上?尽管我希望能够学习,但这超出了我的能力。

现在我已经找到了纠正此错误的一种方法,我可以在拖动时销毁同位素,然后在拖动完成后重新初始化同位素,或者释放该项目,但这似乎效率低下。

I have a page with a grid of items. Each of these items can be dragged onto one of four divs and gets added to that div. This is done using jQuery and JQuery UI draggable/droppable.

The first isotope item can be dragged onto any of the divs. However, the 2nd & 3rd isotope items don't recognize the first droppable div, but when dragged onto the 2nd droppable div, will be added to the first droppable div.

The 4th & 5th draggable items (isotopes) don't recognize the first or second droppable div, but when dragged over the 3rd droppable, gets added to the 2nd droppable.

So somehow the droppable is getting confused as to where the items are being dropped.

When I comment out the following code, the drag and drops work properly. Any ideas as to why this code would affect the droppable areas??

jQuery('div.container').isotope({
 itemSelector: 'div.sub-item', 
 resizesContainer : false,
 layoutMode : 'fitColumns',
 getSortData :{ 
   fitOrder : function ($item){
    var order, 
       index = $item.index();
       if($item.hasClass('sub-item-big') && index % 2) {
            order = index +1.5;
            } else {
            order = index;
            }
        return order;
       }
   },
 sortBy : 'fitOrder'
});

--------------- update ------------------

After some more playing around with this, I decided to add 'destroy' the isotope upon initiating a drag.

  jQuery('div.sub-item').draggable({
         helper: function(){
                jQuery('div.container').isotope('destroy');
                return jQuery(this).clone().appendTo('body');
          }
    })

When I run it this way, the items are being dropped into the correct container.

The isotope documentation says their is a 'remove' function, there are two problems with that.

1) the documentation says it removes the 'specified item elements from Isotope widget and the DOM', but I don't want to remove the item from the widget or from the dom, I just want to remove the isotope functionality

2) I get an error 'cannot call methods on isotope prior to initialization, attempted to call method remove' - but in this case the isotope was initialized, but possibly not on the object that was cloned?? This is above my abilities, though I'm hoping to learn.

Now that I have found one way of correcting this error, I could destroy isotope upon a drag, and then re-initialize isotope after the drag is complete, or the item is let go, but that seems to be inefficient.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文