拖拽改变盒子的宽度

 

 

参考了这篇文章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>

 

posted @ 2021-09-26 11:09  想吃水煮麻辣鱼  阅读(162)  评论(0)    收藏  举报