效果图如下:
底部拖拽按钮点击拖拽可自定义父容器的宽高
<template><div id="business_plane"><div class="business_plane" ref="container"><div class="darg_tool"><el-icon class="drag_H" title="点击拖动调整高度" @mousedown="onTdMousedown($event)"@mouseleave="onTdMouseleave($event)"><DCaret /></el-icon></div></div></div>
</template><script lang="ts" setup>
import { shallowRef, onMounted, nextTick, ref, reactive } from 'vue'
import { CircleClose,DCaret } from '@element-plus/icons-vue'const domInfo = reactive({baseW: 0,baseH: 0,searchToolMT: 10,
});const container = ref<HTMLElement>();const updateTarget = (event: MouseEvent) => {if (!container.value) {console.error('drag--- 请传入一个HTMLElement节点');return;}// movementX/movementY// 两个鼠标移动事件间隔时间中当中鼠标移动的相对坐标;domInfo.baseW = container.value.clientWidth;domInfo.baseH = container.value.clientHeight;domInfo.searchToolMT = document.getElementById("searchTool")!.clientHeight - 10;//container.value!.style.width = `${domInfo.baseW + event.movementX}px`;if (parseInt(`${domInfo.baseH + event.movementY}`) < 550) {container.value!.style.height = '550px';document.getElementById("searchTool")!.style.marginTop = "10px"return}container.value!.style.height = `${domInfo.baseH + event.movementY}px`;document.getElementById("searchTool")!.style.marginTop = `${domInfo.searchToolMT + event.movementY}px`;document.getElementById("tree")!.style.height = `${domInfo.baseH + event.movementY - 110}px`;
};
// change 回调方式
const onTdMousedown = (e: MouseEvent) => {window.addEventListener('mousemove', updateTarget);window.onmouseup = function () {window.onmouseup = null;window.removeEventListener('mousemove', updateTarget);};
};const onTdMouseleave = (e: MouseEvent) => {window.removeEventListener('mousemove', updateTarget);
}</script><style lang="less" scoped>
#business_plane {position: absolute;top: 80px;right: 35px;z-index: 999;
}.business_plane {position: relative;color: #fff;width: 300px;height: 550px;background-image: url(../../assets/images/modal_bg1.png);background-size: 100% 100%;
}.darg_tool {width: 300px;height: 50px;display: flex;justify-content: center;
}.drag_H {position: absolute;width: 30px;height: 30px;bottom: 0px;font-size: 20px;z-index: 999;border-radius: inherit;cursor: move;
}.container {width: 100px;height: 100px;background-color: #ccc;position: relative;
}
</style>