当前位置: 首页 > news >正文

JS修改布局--两列布局,拖拽中间修改左右的宽度

原文网址:JS修改布局--两列布局,拖拽中间修改左右的宽度-CSDN博客

简介

本文介绍HTML两列布局,拖拽中间修改左右的宽度的方法(用JS)。

效果展示

代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>拖拽调整大小</title><style>* {padding: 0;margin: 0;}.container {display: flex;height: 100vh;}.left-right-container {flex: 1;}#middle {width: 10px;background: rgb(230, 230, 230);}#middle:hover {cursor: col-resize;}</style>
</head>
<body>
<div class="container"><div class="left-right-container" id="left">左侧内容</div><div id="middle"></div><div class="left-right-container" id="right">右侧内容</div>
</div></body>
</html>
<script>window.onload = function drag() {let left = document.getElementById('left');let right = document.getElementById('right');let middle = document.getElementById('middle');middle.onmousedown = function (e) {//第一次单击时x轴的坐标。相对于浏览器窗口let startX = (e || event).clientX;//第一次单击时flexGrow的值let startFlexGrow = readFlexGrow(left);document.onmousemove = function (e) {let iEvent = e || event;//移动的距离(向左滑时为负数,右滑时为正数)let diff = iEvent.clientX - startX;let maxWidth = document.body.clientWidth;let middleWidth = middle.offsetWidth;let remainWidth = maxWidth - middleWidth;let flexGrow = startFlexGrow + diff / remainWidth;changeFlex(left, flexGrow);changeFlex(right, 1 - flexGrow);return false;};document.onmouseup = function () {document.onmousemove = null;document.onmouseup = null;};return false;};function changeFlex(element, flexGrow) {let suffix = ' 1 0%';element.style.setProperty('flex', '' + flexGrow + suffix);}function readFlexGrow(element) {let flex = element.style.getPropertyValue('flex');if (flex === "" || flex === null || flex === undefined) {return 0.5;}let flexValueS = flex.split(' ');return +flexValueS[0];}};
</script>

http://www.dtcms.com/a/283282.html

相关文章:

  • GI6E 打破網路封鎖:保護你的通信身份安全
  • AI Agent开发学习系列 - langchain之LCEL(2):LCEL 链式表达解析
  • Java对象的比较
  • 产品更新丨谷云科技 iPaaS 集成平台 V7.6 版本发布
  • C++面向对象创建打印算术表达式树
  • Spring Boot 源码解析之 Logging
  • Vue加密文章密码 VuePress
  • xss-labs靶场(1-5关)
  • 从零开始学习 Redux:React Native 项目中的状态管理
  • 数据结构-1(顺序表)
  • kafka--基础知识点--0
  • 智慧农业新图景:物联网如何精准守护作物生长​
  • 第六届信号处理与计算机科学国际学术会议(SPCS 2025)
  • CrewAI中构建智能体如何选择Crews 和Flows
  • 注意力机制从理论到实践:注意力提示、汇聚与评分函数
  • HertzBeat 监控 SpringBoot 使用案例
  • elf、axf、bin的区别与转换
  • freetds 解决连接SQL SERVER报错Unexpected EOF from the server
  • 基于组学数据的药物敏感性预测模型构建与验证
  • AI时代基础入门
  • 卷积神经网络(CNN)最本质的技术
  • 离线环境中将现有的 WSL 1 升级到 WSL 2
  • list类的常用接口实现及迭代器
  • [BJDCTF2020]Cookie is so stable
  • Mybatis07-缓存
  • 正确选择光伏方案设计软件:人力成本优化的关键一步
  • 聊聊自己的新书吧
  • lustre设置用户配额
  • 同态加密赋能大模型医疗文本分析:可验证延迟压缩的融合之道
  • xss-labs靶场前八关