【发布时间】:2021-07-04 23:07:11
【问题描述】:
我正在尝试通过自己的句柄独立调整元素的宽度(.box)。
与我聚集在一起的只有最后一个元素是可调整大小的。
Min-width 和 max-width 应该不是问题,因为它是用 css 处理的。
我想:
- 通过其句柄(
.handle)独立调整任何元素(.box)的宽度。 (当它的手柄被拖动时,只有该框调整大小) - 优化代码,例如
whenDragging()函数(现在'mouseup'事件即使在我不调整大小时也会被调用)- 不确定是否需要?
var isHandlerDragging = false;
var handlers = document.querySelectorAll('.handler');
for( i=0; i < handlers.length; i++ ){
var handler = handlers[i];
};
var wrappers = document.querySelectorAll('.wrapper');
for( i=0; i < wrappers.length; i++ ){
var wrapper = wrappers[i];
};
var boxes = document.querySelectorAll('.box');
for( i=0; i < boxes.length; i++ ){
var box = boxes[i];
};
function whenDragging() {
if(isHandlerDragging === true){
document.querySelector('*').style.userSelect = "none";
document.querySelector('*').style.pointerEvents = "none";
document.querySelector('*').style.cursor = "ew-resize";
}else{
document.querySelector('*').style.cssText = null;
};
}
document.addEventListener('mousedown', function(e) {
if (e.target === handler) {
isHandlerDragging = true;
}
whenDragging()
});
document.addEventListener('mousemove', function(e) {
if (!isHandlerDragging) {
return false;
}
var containerOffsetLeft = wrapper.offsetLeft;
var pointerRelativeXpos = e.clientX - containerOffsetLeft;
box.style.width = pointerRelativeXpos + 'px';
});
document.addEventListener('mouseup', function(e) {
isHandlerDragging = false;
whenDragging()
});
.wrapper{
display:flex;
margin-top:20px;
}
.box{
width:100%;
max-width:100%;
min-width:100px;
height:50px;
border:0;
background-color:black;
}
.handler{
width:20px;
flex-shrink:0;
cursor: ew-resize;
background-color:red;
}
<div class="wrapper">
<iframe class="box"></iframe>
<div class="handler"></div>
</div>
<div class="wrapper">
<iframe class="box"></iframe>
<div class="handler"></div>
</div>
【问题讨论】:
-
你是说盒子应该独立调整大小(即,当它的手柄被拖动时,只有盒子调整大小)还是你说如果一个盒子(class.box)被如此拖动,那么它们都应该调整大小相同?我无法从你的 sn-p 中看出,因为很多语句什么都不做。感谢您的澄清。
-
@AHaworth 我的意思是独立的,谢谢你让我知道,编辑了这个问题。
标签: javascript html css resize