首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式排序jquery可排序?

问以编程方式排序jquery可排序?
EN

Stack Overflow用户
提问于 2020-09-26 22:49:17
回答 1查看 234关注 0票数 0

我在一个display:flex父div中有一堆div。父div可以使用jquery的sortable函数排序。

除了允许用户排序之外,我还想添加一些做动画排序的按钮。

例如,使用此HTML:

代码语言:javascript
复制
<div class="sortable">
  <div id="div1"></div>
  <div id="div2"></div>
  <div id="div3"></div>
  <div id="div4"></div>
  <div id="div5"></div>
</div>

我想要一个按钮,当按下这个按钮时,会使移动的div1处于div4和div5之间,平滑地移动(实际上,稍微有点不稳定地好像它被手动移动会更好),并且移动它所经过的所有div,所以看起来它是用手移动的。

这是否可能使用jquery的sortable(),还是我最好构建一个自定义解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-27 21:03:11

考虑下面的例子。

​

代码语言:javascript
复制
$(function() {
  function arrange(obj, pre) {
    obj = $(obj);
    var t = $("[id^='div']:eq(" + pre + ")");
    obj.animate({
      top: t.position().top + "px"
    }, {
      duration: 1000,
      step: function(i) {
        $(this).position({
          my: "left top",
          at: "left bottom",
          of: t,
        });
      },
      complete: function() {
        obj.detach().css("top", "").insertAfter(t);
      }
    });
  }

  $(".sortable").sortable().disableSelection();

  $("#arrange").click(function() {
    arrange($("#div1"), 3);
  });
});
代码语言:javascript
复制
.sortable {
  list-style-type: none;
  margin: 0;
  padding: 0;
  position: relative;
}

.sortable div {
  margin: 0 3px 3px 3px;
  padding: 0.4em;
  height: 18px;
}
代码语言:javascript
复制
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="sortable">
  <div id="div1" class="ui-state-default">Item 1</div>
  <div id="div2" class="ui-state-default">Item 2</div>
  <div id="div3" class="ui-state-default">Item 3</div>
  <div id="div4" class="ui-state-default">Item 4</div>
  <div id="div5" class="ui-state-default">Item 5</div>
</div>
<button class="btn" id="arrange">Arrange</button>

​

由https://css-tricks.com/jquery-ui-position-function/建造

更新

​

代码语言:javascript
复制
$(function() {
  function swap(a, b, ms) {
    console.log("Swap:", a.attr("id"), "with", b.attr("id"));
    a.animate({
      top: b.position().top + "px"
    }, {
      duration: ms,
      step: function(i) {
        $(this).position({
          my: "left top",
          at: "left bottom",
          of: b,
        });
      },
      complete: function() {
        a.detach().css("top", "").insertAfter(b);
      }
    });
  }

  function arrangeAfter(a, b) {
    var n = a.next();
    for (var c = parseInt(n.attr("id").slice(-1)); n.index() <= b.index(); c++) {
      swap(a, n, 400);
      n = $("#div" + (c + 1));
    }
  }

  $(".sortable").sortable().disableSelection();

  $("#arrange").click(function() {
    arrangeAfter($("#div1"), $("#div4"));
  });
});
代码语言:javascript
复制
.sortable {
  list-style-type: none;
  margin: 0;
  padding: 0;
  position: relative;
}

.sortable div {
  margin: 0 3px 3px 3px;
  padding: 0.4em;
  height: 18px;
}
代码语言:javascript
复制
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="sortable">
  <div id="div1" class="ui-state-default">Item 1</div>
  <div id="div2" class="ui-state-default">Item 2</div>
  <div id="div3" class="ui-state-default">Item 3</div>
  <div id="div4" class="ui-state-default">Item 4</div>
  <div id="div5" class="ui-state-default">Item 5</div>
</div>
<button class="btn" id="arrange">Arrange</button> <button class="btn" id="reset">Reset</button>

​

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64083196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档