想要实现的效果是左右两个div,中间有个拖拽条(也是个div),鼠标左右拖拽中间的div后,左右的div会随之改变width
flex布局中一般div的position是根据左侧元素的位置宽度来决定的,也就是说上述需求其实可以通过 “拖拽中间div时,修改左侧div宽度” 来实现,但这种变化其实不太对,按理拖拽操作只应该作用在拖拽条上,仅改变其位置,然后左右div自动响应变化进行缩放,而不是先缩放左右div,让拖拽条去自适应位置
通过调整左右div尺寸来改变拖拽条位置也可能会导致精度问题,因为需要将拖拽条的移动距离转换成左右div的宽度,如果宽度是px还好,但是%的话,可能拖拽久一点拖拽条就会偏离鼠标的位置了
所以有没有办法在flex布局中实现这种效果?如果flex不行,那么有没有别的布局可以实现,实在没有那就只能自己写逻辑了。。
简单测试Demo,类名drag是拖拽条,第一个拖拽条移动时,第二个拖拽条应保持固定
<div class="row">
<div class="block">
111
</div>
<div class="drag"></div>
<div class="block">
222
</div>
<div class="drag"></div>
<div class="block">
333
</div>
</div>
<style>
.row {
display: flex;
width: 50%;
}
.block {
background-color: red;
flex:auto;
}
.drag {
background-color: green;
flex: none;
width: 10px;
}
</style>
如果只有两个使用flex应该很容易,一边固定一遍弹性,多个的话可以嵌套试试,第一个拖拽就改变第一个固定框的大小,第二个就改变左边第一个和第二个框合起来的固定框的大小,没尝试过,不过应该有一定可行性。