javascript - 分离和附加元素,直到没有溢出 - jQuery
问题描述
我正在尝试detach()
从其父元素(zone-col)添加一个元素并附加到下一个元素,.zone-col
直到它的新父元素不再溢出该区域。
因此,在我的示例中,小部件应该附加到.zone-col
第二行的第一行,并且循环应该中断,因为它的新父级不应该溢出该区域。
不确定我是否完全理解 while 循环,因为我创建了一个无限循环......
这是我的代码笔
$(function() {
var zone = $('.zone');
var el = $('.active');
var zW = zone.outerWidth();
var zR = zone.offset().left + zW;
var eW = el.outerWidth();
var eR = el.offset().left + eW;
console.log(eR, zR);
while (eR > zR) {
var de = el.find('.widget').detach();
el = el.nextAll('.zone-col:first');
el.append(de);
if (!eR > zR) {
break;
}
}
});
.zone {
width: 500px;
height: 200px;
border: 1px solid #ddd;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.zone-col {
position: absolute;
min-width: 8.333333%;
width: auto;
border: 1px solid black;
height: 100px;
}
.widget {
width: 496px;
height: 100%;
background: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="zone">
<div class="zone-col" style="left: 0; top: 0;"></div>
<div class="zone-col" style="left: 8.333333%; top: 0;"></div>
<div class="zone-col active" style="left: 16.666667%; top: 0;">
<div class="widget"></div>
</div>
<div class="zone-col" style="left: 25%; top: 0;"></div>
<div class="zone-col" style="left: 33.333333%; top: 0;"></div>
<div class="zone-col" style="left: 41.666667%; top: 0;"></div>
<div class="zone-col" style="left: 50%; top: 0;"></div>
<div class="zone-col" style="left: 58.333333%; top: 0;"></div>
<div class="zone-col" style="left: 66.666667%; top: 0;"></div>
<div class="zone-col" style="left: 75%; top: 0;"></div>
<div class="zone-col" style="left: 83.333333%; top: 0;"></div>
<div class="zone-col" style="left: 91.666667%; top: 0;"></div>
<div class="zone-col" style="left: 0; top: 100px;"></div>
<div class="zone-col" style="left: 8.333333%; top: 100px;"></div>
<div class="zone-col" style="left: 16.666667%; top: 100px;"></div>
<div class="zone-col" style="left: 25%; top: 100px;"></div>
<div class="zone-col" style="left: 33.333333%; top: 100px;"></div>
<div class="zone-col" style="left: 41.666667%; top: 100px;"></div>
<div class="zone-col" style="left: 50%; top: 100px;"></div>
<div class="zone-col" style="left: 58.333333%; top: 100px;"></div>
<div class="zone-col" style="left: 66.666667%; top: 100px;"></div>
<div class="zone-col" style="left: 75%; top: 100px;"></div>
<div class="zone-col" style="left: 83.333333%; top: 100px;"></div>
<div class="zone-col" style="left: 91.666667%; top: 100px;"></div>
</div>
解决方案
想通了,需要重置eW
并且eR
每次循环运行时,否则循环总是获得这些变量的第一个初始化值。
while (eR > zR) {
var de = el.find('.widget').detach();
el = el.nextAll('.zone-col:first');
el.append(de);
eW = el.outerWidth();
eR = el.offset().left + eW;
if (!eR > zR) {
break;
}
}
推荐阅读
- c# - 如何以 MVVM 方式显示从外部程序集动态加载的 UserControl
- c# - 代码优先迁移到 Azure 数据库/Web 服务
- python - Python 使用 ExcelWriter 从函数创建数据帧
- sql - SQL 数据库迁移:匹配现有列,如果在新数据库中不存在 - 创建新列
- java - 将时间条件与动作一起编码
- python - 矩阵列排列python
- android - 克隆 Github 存储库后缺少 Android 视图
- javascript - this."FunctionName" 不是函数
- flutter - Flutter中如何处理socket的连接状态?
- python - 需要将一个列表的一部分与另一个列表进行比较,看看它们是否具有相同的数字顺序,如果没有,则查看位于其他位置的元素