html 拖动中间件改变左右div的宽度

<script setup>
import {onMounted} from "vue";

const draggableWay = () => {
  let resize = document.getElementById('dra');
  let left = document.getElementById('leftContent');
  let right = document.getElementById('rightContent');
  let startX = 0
  let width = left.clientWidth;
  let is = false
  // 鼠标按下事件
  resize.addEventListener('mousedown', e => {
    // console.log(e,'mousedown')
    startX = e.clientX
    resize.style.background = '#1124a5';
    resize.left = resize.offsetLeft
    is = true
    resize.left = resize.offsetLeft
    // 鼠标拖动事件
    document.onmousemove = function (e) {
      let endX = e.clientX
      let afterPx = resize.left + (endX - startX) + 'px'
      left.style.width = afterPx
      right.style.width = "calc(100% - " + afterPx + ")"

    }
    // 鼠标松开事件
    document.onmouseup = function (evt) {
      //颜色恢复
      resize.style.background = '#d6d6d6'
      document.onmousemove = null
      document.onmouseup = null
      resize.releaseCapture && resize.releaseCapture() //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
    }
    resize.setCapture && resize.setCapture() //该函数在属于当前线程的指定窗口里设置鼠标捕获
    return false
  })
}
onMounted(() => {
  draggableWay()
})
</script>

<template>
  <div class="box">
    <div id="leftContent"></div>
    <div id="dra"></div>
    <div id="rightContent"></div>
  </div>
</template>

<style scoped lang="less">
.box {
  display: flex;
  height: 100vh;
  align-items: center;
}

#leftContent {
  background-color: #999999;
  flex-shrink: 0;
  height: 100%;
  width: calc(50vw - 10px);
}

#dra {
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  background-color: #9fa0ee;
}

#rightContent {
  flex-shrink: 0;
  height: 100%;
  width: calc(50vw - 10px);
  background-color: #ecb719;
}

</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值