javascript - 如何通过拖动正确调整元素的大小?

标签 javascript html css drag-and-drop

我有两个 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) + '%';
});

问题:

  1. 调整大小发生了,但分隔符随机跳动。它甚至跌倒了很多次。我不知道发生了什么。
  2. 开始拖动时,鼠标光标变为一只手。我希望它保持 col-resize
  3. 很难拖动。

请不要使用 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 左上角的位置(以像素为单位)。这会给你相同的结果,但使用百分比,以便在调整窗口大小时调整列:

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) + '%';
});

关于javascript - 如何通过拖动正确调整元素的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153193/

相关文章:

javascript - Select2 4.0.0 - 更改输入框高度

javascript - 使用 crypto 模块进行 Node.js MD5 解密

javascript - 客户端如何调用flash?

python - 解析奇怪的网页-多个html标签

css - 设计表单时蓝图 CSS 和表示与内容的分离

javascript - 根据选项值匹配选择对象变量

html - 越来越接近我想要实现的确切 CSS 悬停,但需要更多帮助

javascript - 移动到子菜单后使菜单保持悬停状态

css - 谷歌字体 HTTPS 问题

css - 如何将文本重叠背景设置为白色,而溢出到外面的颜色不同?