我有一个绝对定位的侧面板,我需要通过拖动此边框来更改其宽度。我还需要在边框悬停时更改光标。是否可以在不添加另一个 div 进行拖动的情况下执行此操作?
这是标记:
#right_panel {
position: absolute;
border-left: solid 3px #ccc;
width: 100px;
height: 100%;
right: 0;
background-color: #f0f0f0;
}
<body>
<div id="right_panel"></div>
</body>
我不需要完整的解决方案。 A 是(带文档参考)/否答案就足够了。我不需要助手 div
的回答。我已经有一个:
var m_pos;
function resize(e){
var parent = resize_el.parentNode;
var dx = m_pos - e.x;
m_pos = e.x;
parent.style.width = (parseInt(getComputedStyle(parent, '').width) + dx) + "px";
}
var resize_el = document.getElementById("resize");
resize_el.addEventListener("mousedown", function(e){
m_pos = e.x;
document.addEventListener("mousemove", resize, false);
}, false);
document.addEventListener("mouseup", function(){
document.removeEventListener("mousemove", resize, false);
}, false);
#right_panel {
position: absolute;
width: 96px;
padding-left: 4px;
height: 100%;
right: 0;
background-color: #f0f0f0;
}
#resize {
background-color: #ccc;
position: absolute;
left: 0;
width: 4px;
height: 100%;
cursor: w-resize;
}
<body>
<div id="right_panel">
<div id="resize"></div>
</div>
</body>
同样,这是我想要的功能,除了我想删除额外的 div
。
原文由 Anton 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果没有额外的 div,当然可以做到这一点。使用 css 和
::after
创建边框并更改光标。使用MouseEvent.offsetX
判断是否处理元素中的点击。在您的示例中,您想要单击主 div,但仅单击前 4 个像素。您可以通过在点击处理程序中检查
e.offsetX < 4
来做到这一点: