jquery - 如何修复 jqueryUI 容差 :intersect when sorting is animated

标签 jquery jquery-ui jquery-ui-sortable

我有一个自定义的动画可排序,唯一的问题是选项

tolerance : "intersect"

行为不符合预期。我期望的是,当一个元素被拖动到另一个元素上,并且重叠的元素与拖动的元素重叠 +50% 时,排序开始。

然而,这似乎是 jqueryUI 中的一个错误,它实际上需要 100% 与 intersect 重叠,而不是 50%。

我在这个线程中找到的解决方案不适用于我的代码,因为我在排序时使用克隆来为元素设置动画。

jQuery UI sortable tolerance option not working as expected

鉴于我的情况和代码,我该如何解决这个问题?

是否有已知的解决方法?

我意识到这是同一个问题,但我的情况不同,也许有更好的方法来解决这个问题,然后在旧问题中。

这是我的代码:

http://jsbin.com/otoquh/19/edit

$("#original_items li").each(function(){
  var item = $(this);
  var item_clone = item.clone();
  item.data("clone", item_clone);
  var position = item.position();
  item_clone.css("left", position.left);
  item_clone.css("top", position.top);
  $("#cloned_items").append(item_clone);
});

$("#original_items").sortable({
  start: function(e, ui) {
    ui.helper.addClass("exclude-me");
    $("#original_items li:not(.exclude-me)").css("visibility", "hidden");
    ui.helper.data("clone").hide();

  },
stop: function(e, ui){
  $("#original_items li.exclude-me").each(function() {
    var item = $(this);
    var clone = item.data("clone");
    var position = item.position();
    clone.css("left", position.left);
    clone.css("top", position.top);
    clone.show();
    item.removeClass("exclude-me");

  });
  $("#original_items li").css("visibility", "visible");
},
  change: function(e, ui) {
    $("#original_items li:not(.exclude-me, .ui-sortable-placeholder)").each(function() {
      var item = $(this);
      var clone = item.data("clone");
      var position = item.position();
      clone.stop(true, false);
      clone.animate({
        left: position.left,
        top: position.top
      }, 500);

    });
  },
  revert: 500,
  axis: "y"
});

最佳答案

尝试将tolerancecursorAt一起使用。

我对您的代码进行了以下更改:

$("#original_items").sortable({
  tolerance:"pointer",
  cursorAt:{ top: 50 },
  start: function(e, ui) {
    ui.helper.addClass("exclude-me");
    $("#original_items li:not(.exclude-me)").css("visibility", "hidden");
    ui.helper.data("clone").hide();

  },
stop: function(e, ui){
  $("#original_items li.exclude-me").each(function() {
    var item = $(this);
    var clone = item.data("clone");
    var position = item.position();
    clone.css("left", position.left);
    clone.css("top", position.top);
    clone.show();
    item.removeClass("exclude-me");

  });
  $("#original_items li").css("visibility", "visible");
},
  change: function(e, ui) {
    $("#original_items li:not(.exclude-me, .ui-sortable-placeholder)").each(function() {
      var item = $(this);
      var clone = item.data("clone");
      var position = item.position();
      clone.stop(true, false);
      clone.animate({
        left: position.left,
        top: position.top
      }, 500);

    });
  },
  revert: 500,
  axis: "y"
});

演示:http://jsbin.com/otoquh/23/edit

希望这对您有所帮助,如果您有任何疑问,请告诉我!


链接:

关于jquery - 如何修复 jqueryUI 容差 :intersect when sorting is animated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14279525/

相关文章:

javascript - AngularJs - 在具有多个选择的选择框的选项中添加字形和数据

javascript - 防止按钮点击激活 <tr> onclick 事件

php - Div 并非一直在 foreach 循环中申请

jquery - 如何在ui-sortable中手动触发 'update'

javascript - jQuery UI 可排序 : load order from array

jquery 可排序保持在容器边界内

php - 提交按钮影响多个文件

c# string[] 到 jquery 字符串列表?

javascript - 更改 jquery 模式确认对话框的大小

jQueryUI 可排序 + HTML5 文件 API 示例?