如何通过拖动正确调整元素的大小
How to correctly resize an element by dragging?
我有两个div作为两个面板,一个在左边,一个在右边。
它们占据了70%和30%的面积。
它们之间有分隔符
当我向左或向右拖动分隔符时,我希望它保持为分隔符的位置。也就是说,我应该能够通过拖动来动态调整左右div的大小。
下面是我的代码:
http://jsbin.com/witicozi/1/edit HTML:<!DOCTYPE html>
<html>
<head>
<body>
<div style='height: 100px'>
<div id='left'>...</div>
<div id='separator'></div>
<div id='right'>...</div>
</div>
</body>
</html>
CSS: #left {
float: left;
width: 70%;
height: 100%;
overflow: auto;
}
#separator {
float: left;
width: 3px;
height: 100%;
background-color: gray;
cursor: col-resize;
}
#right {
height: 100%;
overflow: auto;
}
JavaScript: document.querySelector('#separator').addEventListener('drag', function (event) {
var newX = event.clientX;
var totalWidth = document.querySelector('#left').offsetWidth;
document.querySelector('#left').style.width = ((newX / totalWidth) * 100) + '%';
});
问题:
- 调整大小发生了,但是分隔符随机地跳跃。它甚至摔倒了很多次。我不知道发生了什么。
- 当拖动开始时,鼠标光标变为手。我希望它仍然是
col-resize
。 - 很难拖动
请不要使用JQuery
如果您使用console.log(event)
,则表明event.clientX
不完全返回您正在寻找的内容。下面的JavaScript在chrome中为我工作。
document.getElementById('separator').addEventListener('drag', function(event) {
var left = document.getElementById('left');
var newX = event.offsetX + left.offsetWidth;
left.style.width = newX + 'px';
});
它返回的event.offsetX
值是左div左上角的位置(px)。这将给您相同的结果,但使用百分比,以便在调整窗口大小时列调整:
document.getElementById('separator').addEventListener('drag', function(event) {
var left = document.getElementById('left');
var newX = event.offsetX + left.offsetWidth;
left.style.width = (newX / window.innerWidth * 100) + '%';
});
采用了一点不同的方法:我没有使用拖放功能,而是使用了一些耦合的鼠标上下监听器。这具有更好的跨浏览器兼容性(至少就我的测试而言),并且它具有能够轻松控制光标的额外好处。
var resize = function(event) {
var newX = event.clientX;
document.getElementById('left').style.width = (newX / window.innerWidth * 100) + '%';
};
document.getElementById('separator').addEventListener('mousedown', function(event) {
document.addEventListener('mousemove', resize);
document.body.style.cursor = 'col-resize';
});
document.addEventListener('mouseup', function(event) {
document.removeEventListener('mousemove', resize);
document.body.style.cursor = '';
});
相关文章:
- 调整<音频>元素
- 可以在调整窗口大小时重新调整stellar.js的元素偏移量
- 可滚动元素,如何在调整大小时更改顶部偏移量
- 如何获得一个进度元素,它被设置为在窗口调整大小时调整大小
- jQuery在使用css定位的元素上调整大小;无法在chrome中正确调整大小
- 在调整大小和加载时移动 DOM 元素.仅适用于调整大小
- 拖动和调整 CSS 转换元素的大小
- jQuery 可调整大小:如何在调整大小拖动期间获取重叠元素
- 调整父元素大小时,文本会移动
- 如何使用可调整大小的元素重叠其他元素
- 如何在使用react时动态调整元素大小
- 在单独的容器中拖放,并调整放置的元素的位置
- HTML5画布中的可拖动和可调整大小元素
- 根据其他调整大小的html元素定位背景图像
- HTML DIV 显示无元素调整大小
- 有实时元素调整大小的例子吗?
- 将Object元素调整为其容器元素的大小
- HTML演示幻灯片,元素调整大小以保持比例
- jQuery mouseout事件后的元素调整大小
- 将Javascript元素调整为浏览器大小