js拖动调整元素宽度

news/2024/11/20 10:34:08/文章来源:https://www.cnblogs.com/cluod/p/18346369

dom结构,一个盒子中包含左中右是三个元素,resize为拖动元素,左侧固定宽度,右侧元素flex:1

 

css部分,拖动元素的样式,左右两边按实际情况修改

 

js部分:

const handleResize = (leftMinWidth = 0, rightMinWidth = 200) => {
const leftDom = document.getElementById('leftDom'),
resizeDom = document.getElementById('resizeDom'),
boxDom = document.getElementById('conbody'),
rightDom = document.getElementById('rightDom');
resizeDom.onmousedown = e => {
const startX = e.clientX; // 记录坐标起始位置
leftDom.left = leftDom.offsetWidth; // 左边元素起始宽度
document.onmousemove = e => {
const endX = e.clientX; // 鼠标拖动的终止位置
let moveLen = leftDom.left + (endX - startX); // 移动的距离 = endX - startX,左边区域最后的宽度 = resizeDom.left + 移动的距离
const maxWidth = boxDom.clientWidth - resizeDom.offsetWidth; // 左右两边区域的总宽度 = 外层容器宽度 - 中间区域拖拉框的宽度
// 限制左边区域的最小宽度为 leftMinWidth
if (moveLen < leftMinWidth) {
moveLen = leftMinWidth;
}
// 右边区域最小宽度为 rightMinWidth
if (moveLen > maxWidth - rightMinWidth) {
moveLen = maxWidth - rightMinWidth;
}
leftDom.style.width = (moveLen / maxWidth) * 100 + '%'; // 设置左边区域的宽度,通过换算为百分比的形式,实现窗体放大缩小自适应
rightDom.style.width = ((maxWidth - moveLen) / maxWidth) * 100 + '%'; // 右边区域 = 总大小 - 左边宽度 - 拖动条宽度
};
document.onmouseup = () => {
document.onmousemove = null;
document.onmouseup = null;
};
return false;
};
};

在此调用该方法。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/779118.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亮点功能 | 企业数据传输限速,应对多种场景,当然要精、准、稳!

企业在进行数据和文件传输时,会尽量提升传输速度来提高业务效率,但在一些特定情况下,传输速度并非越快越好,反之要对其进行限制、控制在一定范围内,这便是传输限速需求。传输限速需求普遍存在于不同领域和企业中,如云服务提供商、电信运营商、大型企业、事业单位以及金融…

LabVIEW的ActorFramework笔记

1 前置知识储备 自分布式计算出现以来,业界已经开始广泛研究基于消息传递编程模型的解决方案。关于消息传递,Wikipedia 描述其广泛定义主要包括:远程过程调用(Remote Procedure Calls, RPC) 和 消息传递接口(Message Passing Interface, MPI)。但是,如今我们所谈到的消…

数据跨境传输的安全合规风险如何规避?获取免费解决方案白皮书!

在全球化的背景下,企业进行有 效的资源整合,学习海外市场的先进技术和管理经验,寻找新的增长点,实现业务的多元化和 可持续发展,不仅有利于开辟新市场,更有助于巩固和增强企业在全球中的地位。在这种前景 下,越来越多的企业寻求更深度的跨国业务及合作,因此,企业数据跨…

IC设计企业如何真正实现便捷又高效地云租户文件传输?

越来越多的IC设计企业选择开通云租户的方式进行半导体芯片的设计和验证工作,也即在HPC环境中进行芯片设计流程,对于IC设计企业而言,使用云租户有明显的好处和优势: 资源分配:云平台会根据租户的需求分配相应的资源,如独立的身份ID、虚拟私有云(VPC)等。每个租户都拥有自…

给我5分钟,保证教会你在vue3中动态加载远程组件

前言 在一些特殊的场景中(比如低代码、减少小程序包体积、类似于APP的热更新),我们需要从服务端动态加载.vue文件,然后将动态加载的远程vue组件渲染到我们的项目中。今天这篇文章我将带你学会,在vue3中如何去动态加载远程组件。 欧阳写了一本开源电子书vue3编译原理揭秘,…

结合实例看 maven 传递依赖与优先级,难顶也得上丫

开心一刻 想买摩托车了,但是钱不够,想找老爸借点 我:老爸,我想买一辆摩托车,上下班也方便 老爸:你表哥上个月骑摩托车摔走了,你不知道?还要买摩托车? 我:对不起,我不买了 老板:就是啊,骑你表哥那辆得了呗,买啥新的先抛问题 关于 maven 的依赖(dependency),我相…

EmpireCMS_V7.5 sql注入漏洞

没有什么好说的侵权声明 本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。 如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系: […

增强用户体验:2个功能强大的.NET控制台应用帮助库

前言 对于.NET开发者而言,构建控制台应用程序时,如何提升用户交互的流畅性和满意度,是一个持续探索与优化的话题。今天大姚给大家分享2个功能强大的.NET控制台应用帮助库,希望可以帮助大家能够快速的构建漂亮、强交互性、丰富功能的控制台应用程序。 Terminal.Gui Terminal…

2024牛客暑期多校训练营7

你说的对但是今天是伟大的御阿礼之子第九代稗田阿求同志的三十华诞目录写在前面JIKDCH写在最后 写在前面 比赛地址:https://ac.nowcoder.com/acm/contest/81602#question 以下按个人难度向排序。 dztlb 大神回去补办身份证了,于是单刷,打的像史。 呃呃抽象场。 J 签到。 手玩…

读零信任网络:在不可信网络中构建安全系统11用户组的认证和授权

读零信任网络:在不可信网络中构建安全系统11用户组的认证和授权1. 用户组的认证和授权 1.1. 几乎在每个系统中都有一小部分操作需要被密切关注1.1.1. 每个应用对这部分操作的风险容忍度各有不同,且没有任何下限1.1.2. 一部分风险是由用户个人的可信度决定的1.1.2.1. 单个用户…

软件测试设计1探索性测试

1 探索性测试 本章将介绍探索性测试:手动试用新功能,快速获得有关其行为的反馈。我们将详细介绍探索性测试,考虑它的优缺点,以及何时应在项目中执行探索性测试。 我们将了解开始探索性测试所需的先决条件以及应采取的方法。这种测试可以是完整测试计划的一个缩影,它从客户…

Kubernetes高级部署组件 Argo Rollout

Argo介绍 https://argoproj.github.io/ Argo 是一个开源项目,旨在提供一套用于在 Kubernetes 上运行和管理容器化工作负载的工具。 Argo 项目最早在2017年由Applatix公司创立开源,在2018年被美国加利福尼的 Intuit 公司收购并持续维护,并得到了广泛的社区支持。 Argo 项目主要…