javascript(3) : 鼠标拖动画矩阵

参考 : HTML+js实现鼠标绘制可拖动矩形_baolin811的专栏-CSDN博客

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312" />
		<title></title>
		<style type="text/css">
			.box {
				border: 3px solid #FF0000;
				width: 0px;
				height: 0px;
				position: absolute;
				opacity: 0.5;
				cursor: move;
			}
		</style>

	</head>
	<body>
		<div>

		</div>
	</body>
	<script type="text/javascript">
		window.onload = function(e) {
			e = e || window.event;
			// startX, startY 为鼠标点击时初始坐标
			// diffX, diffY 为鼠标初始坐标与 box 左上角坐标之差,用于拖动
			var startX, startY, diffX, diffY;
			// 是否拖动,初始为 false
			var dragging = false;

			// 鼠标按下
			document.onmousedown = function(e) {
				startX = e.pageX;
				startY = e.pageY;

				// 如果鼠标在 box 上被按下
				if (e.target.className.match(/box/)) {
					// 允许拖动
					dragging = true;

					// 设置当前 box 的 id 为 moving_box
					if (document.getElementById("moving_box") !== null) {
						document.getElementById("moving_box").removeAttribute("id");
					}
					e.target.id = "moving_box";

					// 计算坐标差值
					diffX = startX - e.target.offsetLeft;
					diffY = startY - e.target.offsetTop;
				} else {
					// 清除之前画的
					removeElementsByClass("box");
					// 在页面创建 box
					var active_box = document.createElement("div");
					active_box.id = "active_box";
					active_box.className = "box";
					active_box.style.top = startY + 'px';
					active_box.style.left = startX + 'px';
					document.body.appendChild(active_box);
					active_box = null;
				}
			};

			// 鼠标移动
			document.onmousemove = function(e) {
				// 更新 box 尺寸
				if (document.getElementById("active_box") !== null) {
					var ab = document.getElementById("active_box");
					ab.style.width = e.pageX - startX + 'px';
					ab.style.height = e.pageY - startY + 'px';
				}

				// 移动,更新 box 坐标
				if (document.getElementById("moving_box") !== null && dragging) {
					var mb = document.getElementById("moving_box");
					mb.style.top = e.pageY - diffY + 'px';
					mb.style.left = e.pageX - diffX + 'px';
				}
			};

			// 鼠标抬起
			document.onmouseup = function(e) {
				// 禁止拖动
				dragging = false;
				if (document.getElementById("active_box") !== null) {
					var ab = document.getElementById("active_box");
					ab.removeAttribute("id");
					// 如果长宽均小于 3px,移除 box
					if (ab.offsetWidth < 3 || ab.offsetHeight < 3) {
						document.body.removeChild(ab);
					}
				}
			};
		};

		// 根据class删除div
		function removeElementsByClass(className) {
			var elements = document.getElementsByClassName(className);
			while (elements.length > 0) {
				elements[0].parentNode.removeChild(elements[0]);
			}
		}
	</script>
</html>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值