10

假设我<div>在一个容器中有六个元素<div>。这六个 div 中的每一个都是一个正方形,并float: left应用了 CSS 样式。默认情况下,当它们到达容器的边缘时,<div>它们会包裹起来。

现在,我的问题是,使用 Javascript,是否可以确定包装在哪个元素上?

如果它们显示在页面上,例如:

 ___   ___
| 1 | | 2 |
----- -----
 ___   ___
| 3 | | 4 |
----- -----

我试图确定环绕发生在第二个和第三个元素之间。如果您想知道我是否失去了理智,我尝试这样做的原因是如果单击其中一个框,我希望能够使用一些花哨的 shmansy jQuery 在行之间下拉一个信息区域。

 ___   ___
| * | | ! |
----- -----
| Someinfo|
 ___   ___
| * | | * |
----- -----

关于确定中断发生在哪里的任何想法?

PS我浮动并让它自动换行的原因是让它响应。现在,如果我调整浏览器的大小,它会相应地包装这些框。我不想硬编码列宽。

[编辑] 感谢 Explosion Pills 提供的答案,我能够想出一个解决方案。

// Offset of first element
var first = $(".tool:first").offset().left;
var offset = 0;
var count = 0;

$(".box").each(function () {

   // Get offset            
   offset = $(this).offset().left;

   // If not first box and offset is equal to first box offset
   if(count > 0 && offset == first)
   {
      // Show where break is
  console.log("Breaks on element: " + count);
   }

   // Next box
   count++;
});

这会在控制台中输出以下内容:

Breaks on element: 7 
Breaks on element: 14
Breaks on element: 21
Breaks on element: 28 

当我有 30 个盒子时,最终是 7 个盒子宽和 5 排(最后一排只有 2 个盒子)

4

4 回答 4

8

只需将容器的宽度除以盒子的宽度..
假设正方形的宽度相等..

这将选择每一行的最后一个元素

var wrapper = $('.wrapper'),
    boxes = wrapper.children(),
    boxSize = boxes.first().outerWidth(true);

$(window).resize(function(){
    var w = wrapper.width(),
        breakat = Math.floor( w / boxSize); // this calculates how many items fit in a row 

    last_per_row = boxes.filter(':nth-child('+breakat+'n)') // target the last element of each row
    // do what you want with the last_per_row elements..
});

演示在 http://jsfiddle.net/gaby/kXyqG/

于 2012-07-09T18:51:48.787 回答
8

我建议您遍历元素并比较顶部位置:

el.position().top;

如果最高值不同 - 此元素在下一行!

这是小提琴:http: //jsfiddle.net/J8syA/1/

这种解决方案的优点是您不需要知道元素、填充等的确切像素宽度。如果您的 css 将更改,此代码仍会找到行中的最后一个元素。

于 2012-07-09T19:06:56.453 回答
4
var offset = 0;
var last = 0;
$(".wrappable-box").each(function () {
   offset = $(this).offset().left;
   if (offset < last) {
      //this is the first box after a wrap
   }
   last = offset;
});
于 2012-07-09T18:39:51.960 回答
0

示例:http: //jsfiddle.net/gvL5ybsq/

function getLastElementInRow(el) {

    var top = el.offset().top,
        next = el.next();

    if (next.size() == 0)
        return el;

    var nextTop = next.offset().top;

    if (nextTop > top)
        return el;

    return getLastElementInRow(next);
};
于 2015-01-27T20:49:38.933 回答