gpt4 book ai didi

html - 如何允许用户手动调整
元素的垂直大小?

转载 作者:搜寻专家 更新时间:2023-10-31 08:39:02 25 4
gpt4 key购买 nike

我在另一个 div 中有 2 个 div 元素,它们分别显示为一个 block 。所以 div1div2 的正上方结束。

我想添加一个用户可以单击和拖动的某种“栏”,最终将调整 div2 的大小,div1 将自动调整大小相同的数量。

div1div2 的父级具有样式:display:flex;flex-direction:column;div1flex-grow:1 所以它会自动调整大小。

我希望调整大小栏是这样的:

resize Bar

如何添加这样的内容?还有什么方法可以改变它在 CSS 中的外观吗?

最佳答案

在您的列 flexbox 中,您可以使用 resize在其中一个 div 上,并使用 flex-grow 自动调整另一个设置为一个 - 缺点 slider 不是很可定制:

  • resize: vertical 添加到其中一个 flex 元素
  • flex: 1 添加到另一个 flex 元素(这样 this flex 元素将在调整大小时响应另一个 flex 元素的高度变化自动调整)

body {
margin: 0;
}

.outer {
display: flex;
flex-direction: column;
height: 100vh;
}

.block {
height: 50%;
}

.block-1 {
background-color: red;
resize: vertical; /* resize vertical */
overflow: auto; /* resize works for overflow other than visible */
}

.block-2 {
background-color: green;
flex: 1; /* adjust automatically */
}
<div class="outer">
<div class="block block-1">
Block 1
</div>
<div class="block block-2">
Block 2
</div>
</div>


解决方案

您可以使用 mousedown 监听器来注册 mousemove 监听器来更新 block-1 高度(并重置 mouseup 事件)- 请参见下面的演示:

let block = document.querySelector(".block-1"),
slider = document.querySelector(".slider");

// on mouse down (drag start)
slider.onmousedown = function dragMouseDown(e) {
// get position of mouse
let dragX = e.clientY;
// register a mouse move listener if mouse is down
document.onmousemove = function onMouseMove(e) {
// e.clientY will be the position of the mouse as it has moved a bit now
// offsetHeight is the height of the block-1
block.style.height = block.offsetHeight + e.clientY - dragX + "px";
// update variable - till this pos, mouse movement has been handled
dragX = e.clientY;
}
// remove mouse-move listener on mouse-up (drag is finished now)
document.onmouseup = () => document.onmousemove = document.onmouseup = null;
}
body {
margin: 0;
}

.outer {
display: flex;
flex-direction: column;
height: 100vh;
}

.block {
height: 50%;
}

.block-1 {
background-color: red;
resize: vertical; /* resize vertical */
overflow: auto; /* resize works for overflow other than visible */
}

.block-2 {
background-color: green;
flex: 1; /* adjust automatically */
min-height: 0;
overflow: hidden; /* hide overflow on small width */
}

.slider {
text-align: center;
letter-spacing: 10px;
background-color: #dee2e6;
cursor: row-resize;
user-select: none; /* disable selection */
}
<div class="outer">
<div class="block block-1">
Block 1
</div>
<div class="slider">slider</div>
<div class="block block-2">
Block 2
</div>
</div>

关于html - 如何允许用户手动调整 <div> 元素的垂直大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55565001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com