【问题标题】:Making An Element's Height Resizable in JS在 JS 中使元素的高度可调整大小
【发布时间】:2021-09-23 15:42:36
【问题描述】:

我正在我的 HTML 页面底部创建一个窗口,我希望在用户单击和拖动时可以调整其大小。这是我目前所拥有的:

var main = document.getElementById("dragWindow")
var dragTop = document.querySelector("#dragWindow .draggerTop")
var dragTopDown = false

dragTop.addEventListener("mousedown", function() {
  dragTopDown = true
})

document.body.addEventListener("mouseup", function() {
  dragTopDown = false
})

document.body.addEventListener("mousemove", function(e) {
  if (dragTopDown == false) {
    return
  }

  var h = (window.innerHeight - e.clientY) + "px"
  main.style.top = "calc(100% - " + h + ")"
})
#dragWindow {
  background: lightgray;
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  top: calc(100% - 150px);
}

#dragWindow .draggerTop {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 5px;
  background: gray;
  cursor: ns-resize;
}
Page content here...

<div id="dragWindow">
  <div class="draggerTop"></div>
</div>

在上面的例子中,拖动器不能很好地工作。它很慢,大部分时间都不会移动。有什么我想念的吗?它主要似乎难以向上移动。此外,当您释放鼠标时,它仍然是可拖动的。

我知道有 CSS resize 属性,但是,我正在尝试使用 js 制作自定义版本。

【问题讨论】:

    标签: javascript html css resize draggable


    【解决方案1】:

    Nvm,我想通了。 而不是使用document.body 作为事件监听器,我应该只使用document。像这样:

    var main = document.getElementById("dragWindow")
    var dragTop = document.querySelector("#dragWindow .draggerTop")
    var dragTopDown = false
    
    dragTop.addEventListener("mousedown", function() {
      dragTopDown = true
    })
    
    document.addEventListener("mouseup", function() {
      dragTopDown = false
    })
    
    document.addEventListener("mousemove", function(e) {
      if (dragTopDown == false) {
        return
      }
    
      var h = (window.innerHeight - e.clientY) + "px"
      main.style.top = "calc(100% - " + h + ")"
    })
    #dragWindow {
      background: lightgray;
      position: absolute;
      bottom: 0;
      left: 0;
      right: 0;
      top: calc(100% - 150px);
    }
    
    #dragWindow .draggerTop {
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      height: 5px;
      background: gray;
      cursor: ns-resize;
    }
    Page content here...
    
    <div id="dragWindow">
      <div class="draggerTop"></div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      相关资源
      最近更新 更多