jQuery:检测Flexbox内部的位置
jQuery: Detect the position inside Flexbox
我有几个盒子,使用Flexbox作为容器,并将标签列为里面的盒子。当你调整宽度时,它们会做出反应并改变位置。我正试图通过jQuery找到一种方法来检测哪些盒子接触左侧,哪些盒子接触右侧,这样我就可以根据它们的位置向它们right
或left
中的addClass
进行造型。我认为使用偏移量来实现这一点是可能的,我正在研究如何开始。有什么想法吗?
JSFiddle
.container {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
flex-direction: row;
list-style:none;
}
li {
border:10px salmon solid;
padding: 25px 15px;
text-align: center;
font-size: 1.2em;
background: white;
flex-grow: 3;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="container">
<li>Alabama</li>
<li>California</li>
<li>Florida</li>
<li>Idaho</li>
<li>Kansas</li>
<li>Nevada</li>
<li>New York</li>
</ul>
这是jQuery代码,将其放在页面底部:
(function(){
function addClass(ul){
ul.children('li.left').removeClass('left');
ul.children('li.right').removeClass('right');
$('ul > li:first-child').attr('class', 'left');
$('ul > li:last-child').attr('class', 'right');
var ulWidth = ul.width();
var totalWidth = 0;
ul.children('li').each(function () {
totalWidth += ($(this).width() + 50);
if (totalWidth > ulWidth) {
$(this).addClass('left');
$(this).prev().addClass('right');
totalWidth = $(this).width();
}
});
}
var ul = $('ul.container');
addClass(ul);
$(window).on('resize', function(){
addClass(ul);
});
}());
此外,代码中的数字50是"li"左右填充和左右边框,加起来就是50。(15+15+10+10)如果需要,请进行更改。
希望它能有所帮助!
我创建了这个小函数,它帮助我在flex父容器中使用可变宽度元素做了更多的技巧,希望它能帮助一些处理这个线程的人,jquery选择器不是从性能角度编写的,所以根据需要修改:
function setFlexClasses(parent_selector) {
//set parent jquery obj
parent = $(parent_selector);
//remove classes: flex-position-* , flex-row-*
parent.find(' > div').removeClass (function (index, css) {
return (css.match (/(^|'s)(flex-position-.*|flex-row-.*)'S+/g) || []).join(' ');
});
//set helper classes for first and last element of this "list"
parent.find(' > div:first-child').addClass('flex-position-first');
parent.find(' > div:last-child').addClass('flex-position-last');
//initialize positioning variables
var parent_offset = parent.offset();
var max_vertical_space = 0;
var row_count = 0;
//for each element in the query
parent.find(' > div').each(function (index) {
//get element metrics
var element_metrics = $(this).offset();
element_metrics.top -= parent_offset.top;
element_metrics.left -= parent_offset.left;
element_metrics.height = $(this).height();
element_metrics.vertical_space = element_metrics.height + element_metrics.top;
//increment row_count if element is below previous elements and set helper classes for row[first|last]
if(element_metrics.top > max_vertical_space) {
$(this).addClass('flex-position-rowfirst');
$(this).prev().addClass('flex-position-rowlast');
row_count++;
}
//reset max_vertical_space if needed
if(element_metrics.vertical_space > max_vertical_space) {
max_vertical_space = element_metrics.vertical_space;
}
//
$(this).addClass('flex-row-' + row_count);
});
}
$.each($('ul'), function() {
var w = $(this).width();
var totalwidth = 0;
$.each($(this).children('li'), function() {
var elw = $(this).width();
if (totalwidth == 0) {
$(this).addClass('left');
}
totalwidth += elw;
if (Math.abs(w - totalwidth) < 1) {
$(this).addClass('right');
totalwidth = 0;
}
})
})
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- jquery试图按名称获取按钮位置
- 如何使用AngularJS在点击身体内部任何位置时显示弹出窗口
- 内容可编辑分区-根据内部HTML位置的光标位置
- jQuery:检测Flexbox内部的位置
- 如何使内部元素具有位置:绝对覆盖溢出:隐藏外部元素
- jQuery/CSS在幻灯片之间的转换扰乱了位置:修复了幻灯片内部的性能
- 按字符位置内部换行文本元素
- 如何找到内部标签的位置并将其聚焦
- 如何确定相对于内部每个字符的页面的位置(x,y)跨越javascript
- 更改在许多位置引用的类的内部 HTML
- 如何将 iframe 位置内部重定向到另一个位置
- 使图像(位置:固定)仅在DIV内部可见
- 控制器内部的角度位置固定(角度模态?)
- 获取可拖动元素相对于元素内部的位置
- 有没有一种方法可以将一个元素从二维数组内部移动到数组中的另一个位置,而不移动其他元素?
- 在HTML页面中放置内部JS和外部JS的位置
- 嵌套的包含指令将内部包含的内容呈现在错误的位置
- 当内部元素的滚动位置达到顶部/底部时,防止父元素滚动
- 如果将内部元素的位置设置为绝对,为什么外部元素不能被过滤器(":visible")找到