vue实现左右两栏布局宽度可拖拽

news/2024/10/19 9:37:43/

项目里需要左右两栏布局根据内容多少可以用户自己拖拽宽度的需求

找了文章参考了下,但都没有实现我要的效果,所以结合调整了一下,记录一下我自己用到的效果
参考文章放下面了,感谢两位大佬

vue拖拽

html实现拖拽

最终效果实现如下:鼠标左右拖动中间滚动条可以改变左右两边的宽度
在这里插入图片描述

代码如下

javascript"><template><div class="box" id="box" ref="box"><div class="left" id="left">左侧div内容</div><div class="resize" id="resize" title="收缩侧边栏"></div><div class="right" id="right">右侧div内容</div></div>
</template>
<script>
export default {data() {return {};},mounted() {this.dragControllerDiv();},methods: {dragControllerDiv() {let resize = document.getElementById("resize");let left = document.getElementById("left");let right = document.getElementById("right");let box = document.getElementById("box");// 鼠标按下事件resize.onmousedown = function (e) {// 记录坐标起始位置let startX = e.clientX;// 左边元素起始宽度resize.left = left.offsetWidth;console.log("宽度:", resize.left);// 鼠标拖动事件document.onmousemove = function (e) {// 鼠标拖动的终止位置let endX = e.clientX;// (endx-startx)= 移动的距离//  resize.left + 移动的距离 = 左边区域最后的宽度let moveLen = resize.left + (endX - startX);console.log(moveLen);// 左右两边区域的总宽度 = 大容器宽度 - 中间区域拖拉框的宽度let maxWidth = box.clientWidth - resize.offsetWidth;// 限制左边区域的最小宽度为30pxif (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);right.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>
<style lang="scss" scoped>
/* 拖拽相关样式 */
.box {width: 100%;height: 100%;margin: 1% 0px;overflow: hidden;box-shadow: -1px 9px 10px 3px rgba(0, 0, 0, 0.11);
}
/*左侧div样式*/
.left {width: calc(50% - 10px); /*左侧初始化宽度*/height: 100%;background: red;float: left;
}
/*拖拽区div样式*/
.resize {cursor: col-resize;float: left;position: relative;top: 45%;background-color: #d6d6d6;border-radius: 5px;margin-top: -10px;width: 10px;height: 50px;background-size: cover;background-position: center;/*z-index: 99999;*/font-size: 32px;color: white;
}
/*拖拽区鼠标悬停样式*/
.resize:hover {color: #444444;
}
/*右侧div'样式*/
.right {float: left;width: 50%; /*右侧初始化宽度*/height: 100%;background: blue;box-shadow: -1px 4px 5px 3px rgba(0, 0, 0, 0.11);
}
</style>

http://www.ppmy.cn/news/1448272.html

相关文章

Dashboard 安装部署

Dashboard 安装部署 Dashboard 安装部署 一&#xff1a;下载 二&#xff1a;部署步骤 1.镜像下载及导入 国内直接拉外网镜像会失败&#xff0c;可在境外下载镜像 查看 deployment 里的镜像版本 Dashboard Deploymentcontainers:- name: kubernetes-dashboardimage: k8s.g…

PHP中的Cookie和Session的区别和用法

PHP中的Cookie和Session的区别和用法 在PHP中&#xff0c;Cookie和Session都是用于保存用户状态信息的重要技术&#xff0c;它们在Web开发中扮演着不可或缺的角色。然而&#xff0c;它们在实现方式、存储位置、安全性以及使用场景等方面存在显著的差异。下面将详细解释Cookie和…

vue和react这两大前端框架的优缺点对比

【A】Vue和React是目前最流行的两个前端框架&#xff0c;它们都具有各自的优点和缺点。下面是对Vue和React的优缺点的详细介绍&#xff1a; Vue的优点&#xff1a; 简单易学&#xff1a;Vue的API设计简单&#xff0c;上手较为容易&#xff0c;学习曲线相对较低。文档丰富&…

OpenCV如何为等值线创建边界旋转框和椭圆(63)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV 为轮廓创建边界框和圆(62) 下一篇:OpenCV的图像矩(64) 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::minAreaRect使用 OpenCV 函数 cv::fitEllipse cv::min…

第G9周:ACGAN理论与实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 由于ACGAN的原理在上一篇文章中已经很详细的解释过了&#xff0c;这次我们直接上代码 一、代码解读 import argparse import os import numpy as npimport t…

黑马 - websocket搭建在线聊天室

这里写自定义目录标题 一、消息推送常见方式二、websocket 是什么&#xff1f;三、websocket api的介绍1、客户端 &#xff08;浏览器&#xff09; 四、实现在线聊天室1、需求2、聊天室流程分析3、消息格式4、代码实现 一、消息推送常见方式 1、轮训方式 2、SSE&#xff08;…

JDBC连接MySQL8 SSL

1.创建用户并指定ssl连接 grant all on . to test% identified by imooc require SSL(X509); 2.查看是否使用ssl SELECT ssl_type From mysql.user Where user"test" 3.配置用户必须使用ssl ALTER USER test% REQUIRE SSL(X509); FLUSH PRIVILEGES; 注意&#xff…

第十五届蓝桥杯

经历半年以来的学习&#xff0c;终于出结果了。期间无数次想要放弃&#xff0c;但是我都挺过来了&#xff0c;因为我还不能倒下。期间有很多次焦虑&#xff0c;一直在想&#xff0c;我要是没拿奖我是不是白学了。但是学到最后就释怀了&#xff0c;因为在备赛期间&#xff0c;我…