javascript - 通过使用 jQuery 重新排序元素来模拟 CSS Column 垂直内容流?

标签 javascript jquery html css sorting

我有一个包含大约 50 个 li 元素的无序列表,它显示在四列网格中,并添加了媒体查询,这些媒体查询以不同的宽度更改列数。

为了支持 IE8 和 9,我使用后备 CSS 和 Modernizr 将 li 元素向左浮动并指定模拟 CSS 列布局的宽度和边距。

唯一的区别是元素是水平流动的而不是垂直流动的。

我想对 $('.main-index li') 数组执行某种“网格排序”重新洗牌,以便 li 元素按 1 这样的顺序运行, 14,27,40,2,15,28,41,3... 而不是 1,2,3,4,5,6,7,8...

我还没有走多远,但这就是我所做的开始......

if (!Modernizr.csscolumns) {

    // If CSS Columns is not supported, re-order li elements 
    // instead of 1,2,3,4,5,6,7,8... reorder to 1,14,27,40,2,15,28,41,3...

    var columnCount = $('.main-index li').css('column-count'); // = 4
    var itemCount = $('.main-index li').length; // = 50
}

我包含了一个 jsFiddle here我用来测试的。

最佳答案

这够好吗?

$( document ).ready(function() {
  // If CSS Columns is not supported, re-order li elements 
  // instead of 1,2,3,4,5,6,7,8... reorder to 1,14,27,40,2,15,28,41,3...
  var items = $('.main-index li');
  var columnCount = $('.main-index ul').css('column-count'); // = 4
  if ( typeof columnCount != 'number' ) {
    columnCount = 4;
  }
  var itemCount = items.length; // = 5

  function reflow() {
    var rowCount = Math.ceil(itemCount / columnCount);
    items.detach();
    $('.main-index ul').empty(); // Prevent build-up of dummy items
    for (var row = 0; row < rowCount; row++) {
      for (var column = 0; column < columnCount; column++) {
        var index = row + (column * rowCount);

        if ( index >= itemCount ) {
          $('.main-index ul').append('<li class="dummy">');
        } else {
          $('.main-index ul').append(items[index]);
        }
      }
    }
  }

  $(window).on('resize', function() {
    var newColumnCount = $('.main-index ul').css('column-count'); // = 4
    if ( typeof newColumnCount != 'number' ) {
      newColumnCount = 4;
    }
    if ( newColumnCount != columnCount ) {
      columnCount = newColumnCount;
      reflow();
    }
  });
});

关于javascript - 通过使用 jQuery 重新排序元素来模拟 CSS Column 垂直内容流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29345467/

相关文章:

javascript - 如何使用 Jquery 使元素出现和消失。

jquery - 电子邮件分隔符类似于 gmail

javascript - 如何防止默认右键单击包含图像的 Canvas

javascript - 重新加载后如何保存对列表的更改

html - 使用 CSS 左上对齐单个图像

javascript - 带逗号的 iOS 小键盘输入类型

javascript - 我可以将为 java 创建的语法文件转换为为 javascript 创建的语法文件吗?

javascript - 如何判断ajax调用是否完成?

html - 列设置为 100% 高度的响应式 CSS

Javascript 不会设置在 XHR 响应中收到的 httpcookie