是的,但它需要 JavaScript。要应用它,您当然可以只设置width
每一边的:
var leftPercent = 50;
function updateDivision() {
document.getElementById('left').style.width = leftPercent + '%';
document.getElementById('right').style.width = (100 - leftPercent) + '%';
}
现在您可以使用 调整除法leftPercent = 50; updateDivision()
,但用户不会这样做。您可以通过多种不同的方式将其呈现给用户。可能最合适的方式是在他们可以拖动的中间一条小线。为此,您可以使用一点 CSS 进行定位:
#content {
position: relative;
}
#divider {
position: absolute;
/* left to be set by JavaScript */
width: 1px;
top: 0;
bottom: 0;
background: black;
cursor: col-resize;
/* feel free to customize this, of course */
}
然后确保你有一个div
with an in和 update来更新id
of :divider
content
updateDivision
left
divider
document.getElementById('left').style.left = leftPercent + '%';
然后你只需要一点逻辑来处理拖动。(在这里,我已将所有元素放入适当命名的变量中):
divider.addEventListener('mousedown', function(e) {
e.preventDefault();
var lastX = e.pageX;
document.documentElement.addEventListener('mousemove', moveHandler, true);
document.documentElement.addEventListener('mouseup', upHandler, true);
function moveHandler(e) {
e.preventDefault();
e.stopPropagation();
var deltaX = e.pageX - lastX;
lastX = e.pageX;
leftPercent += deltaX / parseFloat(document.defaultView.getComputedStyle(content).width) * 100;
updateDivision();
}
function upHandler(e) {
e.preventDefault();
e.stopPropagation();
document.documentElement.removeEventListener('mousemove', moveHandler, true);
document.documentElement.removeEventListener('mouseup', upHandler, true);
}
}, false);
您应该能够阅读它以了解它是如何工作的,但简而言之:它会在有人按下分隔线时进行监听。当他们这样做时,它将在他们移动鼠标时将侦听器附加到页面。当他们这样做时,它会更新变量并调用updateDivision
以更新样式。当它最终得到 amouseup
时,它会停止在页面上监听。
作为进一步的改进,您可以使每个元素在拖动时具有适当的cursor
样式,这样您的光标在拖动时不会闪烁。
试试看。