实现效果如下图所示
源码如下
- DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>title>
- <style>
- .box {
- width: 100%;
- height: 300px;
- display: flex;
- }
- /*左侧div样式*/
- .left {
- width: calc(30% - 5px); /*左侧初始化宽度*/
- height: 100%;
- background: #36cfc9;
- float: left;
- }
- /*拖拽区div样式*/
- .resize {
- cursor: col-resize;
- position: relative;
- background-color: yellow;
- width: 5px;
- height: 300px;
- background-size: cover;
- background-position: center;
- font-size: 32px;
- float: left;
- }
- /*拖拽区鼠标悬停样式*/
- .resize:hover {
- background-color: #444444;
- }
- /*右侧div'样式*/
- .mid {
- float: left;
- width: 70%; /*右侧初始化宽度*/
- height: 100%;
- background-color: #b7eb8f;
- }
- style>
- head>
- <body>
- <div class="box" id="box">
- <div class="left" id="left">
-
- div>
-
- <div id="resize" class="resize" title="收缩侧边栏">
- div>
- <div class="mid" id="right">
-
- div>
- div>
-
- body>
- html>
-
- <script>
- let resize = document.getElementById('resize');
- let left = document.getElementById('left');
- let mid = document.getElementById('right');
- let box = document.getElementById('box');
-
- // 鼠标按下事件
- resize.onmousedown = function (e) {
- // 记录坐标起始位置
- let startX = e.clientX;
-
- // 左边元素起始宽度
- left.left = left.offsetWidth;
- console.log('宽度:',resize.left);
- // 鼠标拖动事件
- document.onmousemove = function (e) {
- // 鼠标拖动的终止位置
- let endX = e.clientX;
-
- // (endx-startx)= 移动的距离
- // resize.left + 移动的距离 = 左边区域最后的宽度
- let moveLen = left.left + (endX - startX);
- console.log(moveLen);
-
- // 左右两边区域的总宽度 = 大容器宽度 - 中间区域拖拉框的宽度
- let maxWidth = box.clientWidth - resize.offsetWidth;
-
- // 限制左边区域的最小宽度为30px
- if (moveLen < 30) moveLen = 30;
-
- // 右边区域最小宽度为 150px 限制左边区域到150后不能再拉宽
- if (moveLen > maxWidth - 420) moveLen = maxWidth - 420;
-
-
- // 设置左边区域的宽度,通过换算为百分比的形式,实现窗体放大缩小自适应
- console.log(moveLen / maxWidth * 100);
- // left.style.width =(moveLen / maxWidth * 100) + '%';
- left.style.width = moveLen + 'px';
-
- // 右边区域即是总大小 - 左边宽度 - 拖动条宽度
- console.log(((maxWidth - moveLen) / maxWidth * 100));
- mid.style.width = (maxWidth - moveLen)+ 'px';
- console.log(moveLen)
- };
- // 鼠标松开事件
- document.onmouseup = function (evt) {
- console.log(11)
- document.onmousemove = null;
- document.onmouseup = null;
- resize.releaseCapture && resize.releaseCapture(); //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
- };
- resize.setCapture && resize.setCapture(); //该函数在属于当前线程的指定窗口里设置鼠标捕获
- return false;
- };
-
- script>