jquery - 使用 packery 确定项目的对齐顺序

标签 jquery packery

这是我的代码笔:http://codepen.io/helloworld/pen/JoKmQr

假设我从服务器获取了一组数据。数据有标题和订单号。

我有 5 个数组项,orderNumber 从 1 到 5。

现在我想布局 5 个 div,其中每个 div 位于 packery 布局系统中的某个位置。

查看此图片:

enter image description here

颜色并不重要。重要的是 div 的顺序根据其顺序号。

orderNumber 的流向是从,从

问题:

如何确定布局系统中 div 的顺序?它们会自动布局到我想要的流程吗?或者手动订购的提示也可以:-)

HTML

<h1>Packery demo - Draggabilly</h1>
<div class="packery js-packery" data-packery-options='{ "isHorizontal": true }'>
  <div class="item w1"></div>
  <div class="item h4"></div>
  <div class="item w2"></div>
  <div class="item w3"></div>
  <div class="item h2"></div>
</div>

CSS

* {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

body { font-family: sans-serif; }

.packery {
  background: #FDD;
  background: hsla(45, 100%, 40%, 0.2);
  counter-reset: item;
  height: 400px;
}

/* clearfix */
.packery:after {
  content: ' ';
  display: block;
  clear: both;
}

.item {
  width: 80px;
  height: 80px;
  float: left;
  border: 4px solid #333;
  border-color: hsla(0, 0%, 0%, 0.3);
}

.item:hover {
  border-color: white;
  cursor: move;
}

.item.w1 { width:   80px; background:green; }
.item.w2 { width:   80px; background:blue; }
.item.w3 { width:   80px; background:yellow; }
.item.h2 { height:  80px; background:red; }
.item.h4 { height: 160px; width:80px; background:orange;}

.item:before {
  counter-increment: item;
  content: counter(item);
  display: block;
  color: white;
  padding-top: 0.2em;
  text-align: center;
  font-size: 18px;
}

.item.is-dragging,
.item.is-positioning-post-drag {
  border-color: white;
  background: #09F;
  z-index: 2;
}

JS

// external js
// http://packery.metafizzy.co/packery.pkgd.js
// http://draggabilly.desandro.com/draggabilly.pkgd.js

$( function() {

  var $container = $('.packery').packery({
    columnWidth: 80,
    rowHeight: 80
  });

  $container.find('.item').each( function( i, itemElem ) {
    // make element draggable with Draggabilly
    var draggie = new Draggabilly( itemElem );
    // bind Draggabilly events to Packery
    $container.packery( 'bindDraggabillyEvents', draggie );
  });

});

最佳答案

为了获取 packery 提供的元素索引,必须调用“getItemElements”来获取每个元素的准确索引。原因是 packery 实际上并没有对 DOM 上的项目进行重新排序,它保留了自己的索引。

这是我解决这个问题的方法:

var $itemElems = $($container.packery('getItemElements'));

orderItems = function() {
var itemElems = $($container.packery('getItemElements'));
$(itemElems).each(function(i, itemElem) {
$(itemElem).attr('data-module-index', i); 
// adds a data attribute called data-module-index to the element and makes the value its actual index.
                });
            };
orderItems();

因此,当您重新布局项目时,请务必为 packery 通过上述函数为您提供的元素保存/使用相同的索引顺序

关于jquery - 使用 packery 确定项目的对齐顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27591587/

相关文章:

javascript - Metafizzy Packery 组件中的动态调整大小效果

angular - 在 Angular 2 中使用 Packery

javascript - 日期格式转换javascript

jquery - 旋转网格时,Packery/Masonry 不支持邮票元素

javascript - jquery get 语法与 php 和 mysql 进行输入验证

javascript - 通过在 php 中重新加载整个页面来刷新特定的 div

javascript - Packery:启用可拖动性和装订线

javascript - Jquery UI无法从左侧拖动到右侧

php - 对于 jquery 脚本中的每个 php 变量

jQuery 执行正则表达式多个选项