【问题标题】:Count DIVs, Add Wrapper with jQuery计算 DIV,使用 jQuery 添加包装器
【发布时间】:2013-01-02 06:02:23
【问题描述】:

我正在编写一个需要在框中显示内容的网页,如下所示:

[ 1 ] [ 3 ] [ 5 ]
[ 2 ] [ 4 ] [ 6 ]

由于屏幕尺寸不同,有时行数会有所不同。例如,允许显示更多行的屏幕将按如下方式排列:

[ 1 ] [ 4 ]
[ 2 ] [ 5 ]
[ 3 ] [ 6 ]

我遇到的问题是,当我将 DIVs 浮动到左侧时,它们会显示如下:

[ 1 ] [ 2 ] [ 3 ]
[ 4 ] [ 5 ] [ 6 ]

我解决此问题的计划是将每一列包装在一个 div 中,并将其浮动到左侧。但是因为根据屏幕大小可能会有不同的行数,所以我需要使用 jQuery 来完成。

我已经用 jQuery 计算了行数,我只是不知道如何在包装器中包装一定数量的 div。到目前为止,这是我的脚本:

var pageHeight = $("body").innerHeight() - 157; // 157 being the height of the page title
var rowCount = Math.floor(pageHeight / 295); // 295 being the height of each item
var itemCount = $("#itemWrapper").children(".item").length;each item
$("#itemWrapper").height(pageHeight);

所以,如果rowCount = 3,那么我需要将每组三个.items 包装在<div class="column"></div> 中。当然请记住,可能只剩下两个或一个 .item

这看起来很简单,但我什至找不到从哪里开始。当我对此进行更多研究时,如果我发现了什么,我一定会更新我的问题。

更新 1:看起来我可以使用 jQuery 的 .wrap() 函数。我只需要弄清楚如何在多个DIV 上使用它。

更新 2:我发现了这段代码,看起来很有希望,但我不知道如何根据行数对其进行更改:

for (var i = 0;i < itemCount;i+=3) {
    $(".item").filter(':eq('+i+'),:eq('+(i+1)+'),:eq('+(i+2)+')').wrapAll('<div class="column" />');
};

似乎对于每个额外的 div,它都需要添加一个数字更高的花药 :eq('+(i+1)+')。不知道如何编写执行此操作的脚本,但我仍在研究。如果我只是更改3' torowCount`,它不会正确关闭所有添加的 div。

【问题讨论】:

  • 如果您不介意跨浏览器问题,请使用垂直弹性框:jsfiddle.net/HJr3H
  • 需要在 IE10 中工作(它将用于 Windows 8 HTML5 应用程序),而且在 Chrome 中似乎无法正常工作(全部显示在一列中)。
  • 你知道,如果你仔细想想,没有“真正的”结构可以等同于自堆叠列的行为。

标签: javascript jquery


【解决方案1】:

您可以将 CSS3 列属性用于支持它们的浏览器。

这是一个可以跨浏览器工作的列包装脚本。我使用基于列数的列类 css 规则以百分比设置宽度

var colCount = 3,/* hard coded for demo, use your calcs for dynamic*/
    $items = $('.item'),
    items_per_col = Math.ceil($items.length / colCount),
    start = 0;

for (i = 0; i < colCount; i++) {
    var endSlice = start + items_per_col;
    $items.slice(start, endSlice).wrapAll('<div class="col' + colCount + '">');
    start += items_per_col;
}

演示:http://jsfiddle.net/MkGyu/1

【讨论】:

  • 完美!我不得不稍微调整一下以适应我当前的代码,但这完全符合我的想象。谢谢!
  • 天啊,我had a CSS anwwer refrence 但把钱花在了砌体上。哦,好吧。
  • @JaredFarrish Masonry 非常酷,但是对于这几行也可以快速适应调整大小处理程序的行可能有点矫枉过正
  • 每个人都知道风格胜于实质,除非我赌的是红色。 :O
【解决方案2】:

我还不能发表评论,很抱歉将其发布为答案。

您应该真正研究使用媒体查询的响应式网页设计。 Here's an article 让您开始。

【讨论】:

    【解决方案3】:
    if (jQuery and wantsColumns) {
       return [Masonry](http://masonry.desandro.com/demos/basic-multi-column.html);
    }
    

    【讨论】:

    • 这看起来很有趣,但看起来我仍然需要用 jQuery 计算 div 的数量才能正确调整大小,所以它没有回答这个问题。
    • 你还要数什么?环顾四周,它会做各种疯狂的事情。
    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2013-10-23
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多