js实现鼠标拖拽改变div大小的同时另一个div宽度也变化

news2024/11/16 15:28:26

实现效果如下图所示

源码如下

<!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>
			<!-- 通过一个 div 来充当区域边框实现拖动 -->
			<div id="resize" class="resize" title="收缩侧边栏"> 
			</div>
			<div class="mid" id="right">
				<!--右侧div内容-->
			</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>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL注入漏洞解析

什么是SQL注入 原理&#xff1a; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情的情况下实现非法操作&#xff0c;以此来实现欺骗数据库服…

贪心/树形dp

思路&#xff1a; 因为如果红色节点的子树中如果有红色节点的话&#xff0c;那么该子树对其不会造成影响&#xff0c;不用考虑&#xff0c;因此我们在考虑每个红色节点时&#xff0c;不考虑其红色子树。那么如图&#xff0c;对每个红色节点答案有贡献的就是其所有非红色子节点…

入侵检测系统的设计与实现

入侵检测系统&#xff08;Intrusion Detection System&#xff0c;简称IDS&#xff09;是一种能够监视网络或计算机系统活动的安全工具&#xff0c;旨在识别并响应可能的恶意行为或安全事件。这些事件可能包括未经授权的访问、恶意软件、拒绝服务攻击等。入侵检测系统通过不同的…

刘雯井柏然植物园漫步,情侣裙超养眼,甜蜜穿搭亮了。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 刘雯井柏然漫步永州植物园&#xff0c;情侣裙惊艳亮相&#x…

算法沉淀——记忆化搜索(leetcode真题剖析)

算法沉淀——记忆化搜索 01.斐波那契数02.不同路径03.最长递增子序列04.猜数字大小 II05.矩阵中的最长递增路径 记忆化搜索算法&#xff08;Memoization&#xff09;是一种通过存储已经计算过的结果来避免重复计算的优化技术&#xff0c;通常应用于递归算法中。这种技术旨在提高…

Jenkins中Publish Over SSH插件使用(1)

SSH插件 前言Publish Over SSH插件是jenkins里面必不可少的插件之一&#xff0c;主要的功能有两个把jenkins服务器上的文件&#xff0c;传输到远程nginx&#xff0c; 远程执行shell命令和脚本。 1. SSH插件下载与配置 1.1 下载Publish over SSH插件 系统管理—》管理插件 …

stm32单片机的智能手环-心率-步数-距离-体温-蓝牙监控

一.硬件方案 随着社会的发展&#xff0c;人们的物质生活水平日渐提高&#xff0c;人们也越来越关注自己的健康。智能手环作为一种测量仪器&#xff0c;可以计算行走的步数和消耗的能量&#xff0c;所以人们可以定量的制定运动方案来健身&#xff0c;并根据运行情况来分析人体的…

javaweb day3 day4 day5

js 引入方式 写法 基础语法 写法 变量 写法 数据类型 运算符 与java相同 会判断类型是否相同 循环控制语句 和java相同 函数&#xff08;方法&#xff09; 写法 Array数组 写法 string字符串 写法 js自定义对象 写法 JSON 写法 BOM window 写法 location 写法 DOM 案例…

蓝桥杯DP算法——区间DP(C++)

根据题意要求的是将石子合并的最小权值&#xff0c;我们可以根据DP思想使用二维数组f[i,j]来存放所有从第i堆石子到第j堆石子合并成一堆石子的合并方式。 然后由第二个图所示&#xff0c;我们可以将i到j区间分成两个区间&#xff0c;因为将i到j合并成一个区间的前一步一定是合…

C++中的STL数据结构

内容来自&#xff1a;代码随想录&#xff1a;哈希表理论基础 1.常见的三种哈希结构 当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构 数组 set &#xff08;集合&#xff09; map(映射) 在C中&#xff0c;set 和 map 分别提供以下三种数据结构…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg、pdf转eps

1、eps转pdf 直接使用epstopdf命令&#xff08;texlive、mitex自带&#xff09;。 在cmd中进入到eps矢量图片的目录&#xff0c;使用下面的命令&#xff1a; for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码&#xff1a; import matplotlib.pyplot as…

win11修改网络算法为BBR2_提升网络环境质量

Win11 BBR2 是Google开发的一种高效的网络拥塞控制算法&#xff0c;玩 Linux 的朋友应该对它还有锐速不陌生。相比Windows默认使用的 CUBIC 算法&#xff0c;BBR2 在网络吞吐量、延迟、全局性能等方面都有一定优势。 如果你日常网络经常丢包或者高延迟可以尝试切换为BBR2算法。…

给自己留个备忘,blender是右手坐标系

所谓右手坐标系&#xff0c;就是三个轴的方向和右手三根手指的方向一致&#xff08;当然&#xff0c;有要求的&#xff0c;这个要求是大拇指指向x轴方向&#xff0c;食指指向y轴方向,中指指向z轴方向&#xff09;。 不过blender默认是z轴朝上的&#xff0c;如下图。 右手坐标系…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

Vue3自定义组件v-model双向绑定

无能吐槽一下&#xff0c;虽然用了很多遍v-model&#xff0c;但是还是不得要领&#xff0c;每次看官网都感觉说的不是很清晰&#xff0c;在写的时候还是要查看文档&#xff0c;可能就是不理解原理&#xff0c;这次特意好好写一篇文章&#xff0c;让自己好好理解一下。 自定义一…

什么是IP地址,IP地址详解

在互联网的世界中&#xff0c;每一台连接的设备都需要一个独特的标识&#xff0c;这就是IP地址。IP地址&#xff0c;全称为“Internet Protocol Address”&#xff0c;即互联网协议地址&#xff0c;它是网络中进行数据传输的基础。下面&#xff0c;我们将对IP地址进行详细的解析…

EI论文联合复现:含分布式发电的微网/综合能源系统储能容量多时间尺度线性配置方法程序代码!

适用平台&#xff1a;Matlab/Gurobi 程序提出了基于线性规划方法的多时间尺度储能容量配置方法&#xff0c;以满足微电网的接入要求为前提&#xff0c;以最小储能配置容量为目标&#xff0c;对混合储能装置进行容量配置。程序较为基础&#xff0c;算例丰富、注释清晰、干货满满…

VoVNet(CVPR workshop 2019)原理与代码解析

paper&#xff1a;An Energy and GPU-Computation Efficient Backbone Network for Real-Time Object Detection third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vovnet.py 存在的问题 DenseNet通过密…

泰山派学习笔记(二)一步一步编译SDK文件

上一节&#xff0c;我们安装了基于虚拟机的ubuntu系统&#xff0c;并且建立了samba服务打通了win10和ubuntu系统中的文件传输。本节课我们继续对立创官方提供的SDK文件进行编译&#xff0c;学习编译的方法。引用官方的话&#xff1a;如果只想下载别人编译好的固件并且做一些应用…

Linux系统运维:离线安装sar-性能监视和分析工具

目 录 一、前言 二、系统环境 三、安装sar &#xff08;一&#xff09;准备工作 1、下载 sar 工具的安装包&#xff1a; 2、将安装包传输到 CentOS 服务器 &#xff08;二&#xff09;安装工作 1、解压 2、配置安装 3、编译 4、安装 &#xff08;三&#xff0…