拖拽改变盒子的宽度
参考了这篇文章https://www.cnblogs.com/layaling/p/11009570.html
自测有效 内容如下
1 <template> 2 <div class="wid100 hig100"> 3 <div class="box" ref="box"> 4 <div class="left" ref="left">西瓜</div> 5 <div class="resize" ref="resize"></div> 6 <div class="mid" ref="mid">备注2</div> 7 </div> 8 </div> 9 </template> 10 <script> 11 export default { 12 name: "Dashboard", 13 mounted() { 14 this.dragControllerDiv(); 15 }, 16 methods: { 17 dragControllerDiv: function() { 18 var resize = document.getElementsByClassName("resize"); 19 var left = document.getElementsByClassName("left"); 20 var mid = document.getElementsByClassName("mid"); 21 var box = document.getElementsByClassName("box"); 22 for (let i = 0; i < resize.length; i++) { 23 // 鼠标按下事件 24 resize[i].onmousedown = function(e) { 25 var startX = e.clientX; 26 resize[i].left = resize[i].offsetLeft; 27 // 鼠标拖动事件 28 document.onmousemove = function(e) { 29 var endX = e.clientX; 30 var moveLen = resize[i].left + (endX - startX); // (endx-startx)=移动的距离。resize[i].left+移动的距离=左边区域最后的宽度 31 var maxT = box[i].clientWidth - resize[i].offsetWidth; // 容器宽度 - 左边区域的宽度 = 右边区域的宽度 32 33 if (moveLen < 150) moveLen = 150; // 左边区域的最小宽度为150px 34 if (moveLen > maxT - 150) moveLen = maxT - 150; //右边区域最小宽度为150px 35 36 resize[i].style.left = moveLen; // 设置左侧区域的宽度 37 38 for (let j = 0; j < left.length; j++) { 39 left[j].style.width = moveLen + "px"; 40 mid[j].style.width = box[i].clientWidth - moveLen - 10 + "px"; 41 } 42 }; 43 // 鼠标松开事件 44 document.onmouseup = function(evt) { 45 document.onmousemove = null; 46 document.onmouseup = null; 47 resize[i].releaseCapture && resize[i].releaseCapture(); //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉 48 }; 49 resize[i].setCapture && resize[i].setCapture(); //该函数在属于当前线程的指定窗口里设置鼠标捕获 50 return false; 51 }; 52 } 53 } 54 } 55 }; 56 </script> 57 <style scoped lang="scss"> 58 .wid100 { 59 width: 100%; 60 } 61 .hig100 { 62 height: 100%; 63 } 64 // ul, 65 // li { 66 // list-style: none; 67 // display: block; 68 // margin: 0; 69 // padding: 0; 70 // } 71 .box { 72 width: 100%; 73 height: 48%; 74 75 display: flex; 76 overflow: hidden; 77 } 78 .left { 79 width: calc(10% - 10px); 80 height: 100%; 81 background: #c9c9c9; 82 } 83 .resize { 84 width: 5px; 85 height: 100%; 86 cursor: w-resize; 87 } 88 .mid { 89 width: 70%; 90 height: 100%; 91 background: #f3f3f3; 92 } 93 </style>

浙公网安备 33010602011771号