碰撞检测

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>碰撞</title>
		<style type="text/css">
			* {
				margin:0;
				padding:0;
			}
			.wp1,.wp2 {
				width:200px;
				height:200px;
				background: #04BE02;
				position: absolute;
			}
			.wp1 {
				left:0;
				top:0;
			}
			.wp2 {
				left:500px;
				top:300px;
			}
		</style>
	</head>
	<body>
		<div class="wp1">1</div>
		<div class="wp2">2</div>
	</body>
</html>
<script type="text/javascript">
	function $(ele){
		return document.querySelector(ele);
	}
	function rand(m,n){
		return Math.floor(Math.random()*(n-m+1)+m);
	}
	function randCol(){
		var r = rand(0,255);
		var g = rand(0,255);
		var b = rand(0,255);
		
		return 'rgb('+r+','+g+','+b+')';
	}
	
	$('.wp1').onmousedown = function(){
		// 获取元素的left和top
		var l = parseInt(getComputedStyle(this).left);
		var t = parseInt(getComputedStyle(this).top);
		
		// 获取元素点击位置的坐标
		var x = event.clientX;
		var y = event.clientY;
		
		$('.wp1').onmousemove = function(){
			
			//获取移动位置的坐标
			var x1 = event.clientX;
			var y1 = event.clientY;
			
			$('.wp1').style.left = l+(x1-x)+'px';
			$('.wp1').style.top = t+(y1-y)+'px';
			
			//检测是否碰撞
			if(isPeng( $('.wp1') , $('.wp2') )){
				$('.wp2').style.background = randCol();
			}
			
			return false;
		};
		return false;
	};
	document.onmouseup = function(){
		$('.wp1').onmousemove = null;
	};
	
	//碰撞检测函数
	function isPeng(obj1,obj2){
		// 获取obj1 数据
		var l1 = obj1.offsetLeft;
		var t1 = obj1.offsetTop;
		var r1 = obj1.offsetLeft+obj1.clientWidth;
		var b1 = obj1.offsetTop+obj1.clientHeight;
		// 获取obj2 数据
		var l2 = obj2.offsetLeft;
		var t2 = obj2.offsetTop;
		var r2 = obj2.offsetLeft+obj2.clientWidth;
		var b2 = obj2.offsetTop+obj2.clientHeight;
		
		//判断是否碰撞
		if(l1>r2||t1>b2||r1<l2||b1<t2){
			return false; //没有碰撞
		}else{
			return true; // 碰撞了
		}
	}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值