拖拽总结

1:鼠标在元素上的坐标位置
          offsetX
          offsetY
2:鼠标在浏览器(可视窗口)上的坐标位置
          clientX
          clientY
3:事件

onmousedown		鼠标按下
onmousemove		鼠标移动
onmouseup		鼠标弹起

4:可视窗口的宽度和高度

document.documentElement.clientWidth
document.documentElement.clientHeight

5:获取元素的宽高

offsetWidth
offsetHeight

6:获取元素到浏览器窗口的距离

offsetLeft
offsetTop

简单拖拽效果图
在这里插入图片描述
具体代码入下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			div{
				width: 100px;
				height: 100px;
				background: pink;
				position: absolute;
			}
		</style>
	</head>
	<body>
		<div id="box"></div>
	</body>
	<script type="text/javascript">
		//拖拽思路
		//	1:光标移到拖拽元素上,按住鼠标不松手
		//	2:开始在可视区域移动光标。被拖拽的元素跟随
		//	3:松开鼠标,被拖拽的元素停止移动
		var obox=document.getElementById('box');
		obox.onmousedown=function(e){
			var e=e||window.event;
			x=e.offsetX;//获取光标在div元素的坐标位置
			y=e.offsetY;
			document.onmousemove=function(e){
				var e=e||window.event;
				obox.style.left=e.clientX-x+'px';
				obox.style.top=e.clientY-y+'px';
				console.log(e.clientX+',,,'+x)//251,,,98
			}
//			e.clientX是光标在可视区域的坐标位置
//			e.offsetX;//获取光标在div元素的坐标位置
//			光标在可视区域的值-获取光标在div元素的值  为什么两个值要减一下?
//			两个值相减的目的,就是可以让光标在div上任意位置就行拖拽
		}
		obox.onmouseup=function(){
			document.onmousemove=0;
//			document.οnmοusemοve=后面可以赋值  null 0 false ' '
		}
	</script>
</html>

拖拽碰撞效果图
在这里插入图片描述在这里插入图片描述
代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			#box1{
				width: 100px;
				height: 100px;
				background: red;
				position: absolute;
			}
			#box2{
				width: 100px;
				height: 100px;
				background: yellow;
				position: fixed;
				top:300px;
				left:300px;
			}
		</style>
	</head>
	<body>
		<div id="box1"></div>
		<div id="box2"></div>
	</body>
	<script type="text/javascript">
		//碰撞思路
		//1:拖拽div1元素
		//2:当div1的底边碰到div2的上边,div2变色
		//	当div1的上边碰到div2的底边,div2变色
		//	当div1的左边碰到div2的右边,div2变色
		//	当div1的右边碰到div2的左边,div2变色
//		3:如何做到当div1的底边碰到div2的上边,div2就变色呢?
//			先得到div1元素底边到顶部距离?odiv1.offsetTop+odiv1.offseHeight
//			再得到div2元素上边到顶部距离?odiv2.offsetTop
//			如果判断div1底边到顶部的距离>div2元素上边到顶部距离,那么就让div2变色

		var ored=document.getElementById('box1');
		var oyellow=document.getElementById('box2');
		ored.onmousedown=function(e){
			var e=e||window.event;
			var x=e.offsetX;
			var y=e.offsetY;
			document.onmousemove=function(e){
				var e=e||window.event;
				ored.style.left=e.clientX-x+'px';
				ored.style.top=e.clientY-y+'px';
				//求红色底边到顶部的距离
				var ored_b=ored.offsetHeight+ored.offsetTop;
				//求红色上边到顶部的距离
				var ored_t=ored.offsetTop;
				//求红色左边到浏览器左边的距离
				var ored_l=ored.offsetLeft;
				//求红色右边到浏览器左边的距离
				var ored_r=ored.offsetWidth+ored.offsetLeft;
				//求黄色上边到顶部的距离
				var oyellow_t=oyellow.offsetTop;
				//求黄色底边到顶部的距离
				var oyellow_b=oyellow.offsetHeight+oyellow.offsetTop;
				//求红色左边到浏览器左边的距离
				var oyellow_l=oyellow.offsetLeft;
				//求红色右边到浏览器左边的距离
				var oyellow_r=oyellow.offsetWidth+oyellow.offsetLeft;
				//我们现在已经求出了 两个元素四个边的值!
				//红色底边到顶部的距离>黄色上边到顶部的距离 黄色变蓝
				//红色上边到顶部的距离<黄色底边到顶部的距离 黄色变蓝
				//红色左边到左部的距离<黄色右边到左部的距离 黄色变蓝
				//红色右边到左部的距离>黄色左边到左部的距离 黄色变蓝
				if(ored_b<oyellow_t||ored_t>oyellow_b||ored_l>oyellow_r||ored_r<oyellow_l){
					oyellow.style.background='yellow';
				}else{
					oyellow.style.background='blue';
				}
			}
			
		}
		ored.onmouseup=function(){
			document.onmousemove=null;
		}
		
		
		
		
		
	</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值