元素向左浮动时如何获取列数
How to get the number of columns when elements are floated left
这是简化的情况:
var columns = null,
firstPositionTop = $('div').eq(0).offset().top;
$('div').each(function(index) {
var thisPositionTop = $(this).offset().top;
if (thisPositionTop !== firstPositionTop && columns == null) {
columns = index;
}
});
console.log(columns);
div {
width: 15%;
padding-bottom: 15%;
margin: 5%;
background: DeepPink;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
我正在尝试找出使用 JavaScript 或 jQuery.
计算列数(上例中为 4)的最简单方法
有没有更简单的方法?
(元素的数量会有所不同,有媒体查询会改变columns/rows的数量)。
如果将 div 包装在外部容器中,您可以对它们进行数学计算,看看有多少适合。像这样:
var oWidth = $('.outer').width();
var iWidth = $('.inner').outerWidth(true);
$('#display').text(oWidth / iWidth);
.inner {
width: 15%;
padding-bottom: 15%;
margin: 5%;
background: DeepPink;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="display"></p>
<div class="outer">
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
</div>
话虽如此,您的初始解决方案工作得很好,所以我真的看不出有任何理由放弃它。
这是简化的情况:
var columns = null,
firstPositionTop = $('div').eq(0).offset().top;
$('div').each(function(index) {
var thisPositionTop = $(this).offset().top;
if (thisPositionTop !== firstPositionTop && columns == null) {
columns = index;
}
});
console.log(columns);
div {
width: 15%;
padding-bottom: 15%;
margin: 5%;
background: DeepPink;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
我正在尝试找出使用 JavaScript 或 jQuery.
计算列数(上例中为 4)的最简单方法有没有更简单的方法?
(元素的数量会有所不同,有媒体查询会改变columns/rows的数量)。
如果将 div 包装在外部容器中,您可以对它们进行数学计算,看看有多少适合。像这样:
var oWidth = $('.outer').width();
var iWidth = $('.inner').outerWidth(true);
$('#display').text(oWidth / iWidth);
.inner {
width: 15%;
padding-bottom: 15%;
margin: 5%;
background: DeepPink;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="display"></p>
<div class="outer">
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
<div class="inner"></div>
</div>
话虽如此,您的初始解决方案工作得很好,所以我真的看不出有任何理由放弃它。