js實現側邊欄拖動寬度伸縮

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>可拖拽側邊欄</title>
  <style type="text/css">
    .container {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(5, 9, 38, .8);
    }
    .drag-area {
      width: 300px;
      /*設置拖拽盒子的最小值,當拖拽的值小於這個值,將不再因拖拽而繼續變小*/
      min-width: 100px;
      height: 100%;
      background-color: rgba(22, 22, 22, .3);
      position: relative;
    }
    .drag-tip {
      height: 100%;
      width: 6px;
      position: absolute;
      top: 0;
      left: 294px;
      background-color: transparent;
    }
    /*鼠標移入顯示可拖動樣式*/
    .drag-tip:hover {
      cursor: w-resize;
    }
  </style>
</head>
<body>
<div class="container" id="container">
  <!--拖動區域-->
  <section class="drag-area" id="drag-area"></section>
  <!--拖動按鈕-->
  <div class="drag-tip" id="drag-tip"></div>
</div>
<script type="text/javascript">
  let dragBtn = document.getElementById('drag-tip'),
    dragDom = document.getElementById('drag-area'),
    container = document.getElementById('container');

  // 鼠標摁下
  dragBtn.onmousedown = function (e) {
    // 鼠標的X軸座標
    let clientX = e.clientX;
    // 拖動塊距離屏幕左側的偏移量
    let offsetLeft = dragBtn.offsetLeft;

    // 鼠標移動
    document.onmousemove = function (e) {
      let curDist = offsetLeft + (e.clientX - clientX), // 拖動塊的移動距離
          maxDist = container.clientWidth - dragBtn.offsetWidth; // 拖動塊的最大移動距離

      // 邊界值處理
      curDist < 0 && (curDist = 0);
      curDist > maxDist && (curDist = maxDist);

      // 設置值(保證拖動塊一直在拖動盒子的相對位置)
      dragBtn.style.left = dragDom.style.width = curDist + "px";
      return false
    };
    // 鼠標鬆開
    document.onmouseup =  function (e) {
      document.onmousemove = null;
      document.onmouseup = null;
      // 釋放鼠標
      dragBtn.releaseCapture && dragBtn.releaseCapture()
    };
    // 捕獲鼠標
    dragBtn.setCapture && dragBtn.setCapture();
    return false
  };
</script>
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章