js 鼠标拖动div

div中心跟踪鼠标动而动
得到鼠标坐标,移动时div的左上距离为鼠标两坐标减去div左上顶点到中心的距离

div任意位置随鼠标动而动
得到鼠标第一次坐标,移动时div的左上距离就为div每次移动前最开始的左上距离加上鼠标移动中的坐标减去鼠标第一次坐标,即任意位置移动是移动过程相对于第一次的位移

小div在大div内移动
在任意移动的基础上,判断div的最终左上边距,如果大于或小于大div的大小,则将小div的左右边界设置为临界值

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			
			.div1{
				height:100px;
				width:100px;
				background-color: orange;
				position:absolute;
				top:100px;
				left: 100px;
			}	
					
		</style>
	</head>
	<body>
		<div class="div1">
			
		</div>
		
		<script>
			var div1=document.querySelector(".div1");
			var flag=false;
			var mx=0;
			var my=0;
			var dx=0;
			var dy=0;
			div1.onmousedown=function(){
				flag=true;
				console.log("a");
				mx=event.clientX;
				my=event.clientY;
				dx=div1.offsetLeft;
				dy=div1.offsetTop;

			}
			
				
				document.onmousemove=function(){  //在整个html范围内滑动
					
					if(flag){
						var templeft=event.clientX;
						var temptop=event.clientY;
						
						div1.style.left=templeft-mx+dx+"px";
						div1.style.top=temptop-my+dy+"px";   //样式任意位置随鼠标拖动而拖动
						
						
						/*div1.style.left=templeft-50+"px";
						div1.style.top=temptop-50+"px";*/  //样式中心随鼠标拖动而拖动
					}
				}
			document.onmouseup=function()
			{
				flag=false;
			}
			
			
		</script>
	</body>
</html>

小div在大div内移动

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.big{
				width:500px;
				height:500px;
				border:solid 1px orange;
				position: relative;
				left:50px;
				top:50px;
			}
			.small{
				width:100px;
				height:100px;
				background-color:orange;
				position:absolute;
				left:50px;
				top:100px;
			}
		</style>
	</head>
	<body>
		<div class="big">
			<div class="small">
				
			</div>
		</div>
		
		<script>
			var big=document.querySelector(".big");
			var small=document.querySelector(".small");
			var flag=false;
			var cx;
			var cy;
			var sx;
			var sy;
			
			
			small.onmousedown=function(){
				flag=true;
				cx=event.clientX;
				cy=event.clientY;
				sx=small.offsetLeft;
				sy=small.offsetTop;
				console.log(cx,sx);
			}
			
			big.onmousemove=function(){
				if(flag){
					var ccx=event.clientX;
					var ccy=event.clientY;
					
					var resultx=sx+ccx-cx;
					var resulty=sy+ccy-cy;
					
					
					//确定边界
					if(resultx<0)
					{
						resultx=0;
					}
					if(resultx>400)
					{
						resultx=400;
					}
					if(resulty<0)
					{
						resulty=0;
					}
					if(resulty>400)
					{
						resulty=400;
					}
					//结果
					small.style.left=resultx+"px";
					small.style.top=resulty+"px";
					
					
				}
			}

			document.onmouseup=function(){
				flag=false;
				
			}
		</script>
	</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现鼠标拖动改变div列宽和行高,你可以使用JavaScript和CSS来完成。下面是一种实现方式: 1. 首先,在HTML中创建一个包含多个div的容器,每个div代表一个列或行。例如,创建一个id为"container"的div容器,并在其中添加一些子div。 ```html <div id="container"> <div class="column"></div> <div class="column"></div> <div class="column"></div> </div> ``` 2. 在CSS中设置容器和列的样式。设置列的宽度和高度,以及鼠标光标样式。 ```css #container { display: flex; } .column { flex: 1; min-width: 100px; min-height: 100px; border: 1px solid black; cursor: col-resize; } ``` 3. 在JavaScript中添加事件监听器,以便在鼠标拖动时改变列的宽度和行的高度。 ```javascript var columns = document.querySelectorAll('.column'); var isResizing = false; var lastDownX = 0; var newWidth = 0; columns.forEach(function(column) { column.addEventListener('mousedown', function(e) { isResizing = true; lastDownX = e.clientX; newWidth = column.offsetWidth; }); column.addEventListener('mousemove', function(e) { if (!isResizing) return; var widthChange = e.clientX - lastDownX; newWidth = newWidth + widthChange; column.style.width = newWidth + 'px'; }); column.addEventListener('mouseup', function() { isResizing = false; }); }); ``` 通过以上代码,你可以在鼠标拖动时改变每个div列的宽度。同样的原理也适用于改变行的高度,只需适当调整CSS和JavaScript即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值