【实例】【html5】在canvas获取鼠标的坐标

html5-canvas 专栏收录该内容
15 篇文章 0 订阅

方法

使用onmousemove来实时获取当前鼠标移动事件,以刷新新的坐标
使用canvas.getBoundingClientRect()获取当前画布的位置信息

实现


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#canvas {
				border: thin solid blue;
			}
		</style>
	</head>
	
	<body>
		<p id="message"></p>
		<canvas id="canvas" width="1200" height="600"></canvas>
	</body>
	<script type="text/javascript">
		var canvas = document.getElementById("canvas");
		var context = canvas.getContext("2d");
		
		function getLocation(x, y) {
			var bbox = canvas.getBoundingClientRect();
			return {
				x: (x - bbox.left) * (canvas.width / bbox.width),
				y: (y - bbox.top) * (canvas.height / bbox.height)
				
				/*
				 * 此处不用下面两行是为了防止使用CSS和JS改变了canvas的高宽之后是表面积拉大而实际
				 * 显示像素不变而造成的坐标获取不准的情况
				x: (x - bbox.left),
				y: (y - bbox.top)
				*/
			};
		}
		function drawHorizontalLine(y) {
			context.beginPath();
			context.moveTo(0, y);
			context.lineTo(canvas.width, y);
			context.stroke();
			context.closePath();
		}
		function drawVerticalLine(x) {
			context.beginPath();
			context.moveTo(x, 0);
			context.lineTo(x, canvas.height);
			context.stroke();
			context.closePath();
		}
		canvas.onmousemove = function (e) {
			var location = getLocation(e.clientX, e.clientY);
			var message = document.getElementById("message");
			message.innerHTML = "x=" + location.x + " ,y=" + location.y;
			context.clearRect(0, 0, canvas.width, canvas.height);
			drawHorizontalLine(location.y);
			drawVerticalLine(location.x);
		};
	</script>
</html>


值得注意的是:当canvas的表面积和实际显示的像素值不同的时候(如用css把120px*60px的canvas扩大到了1200px*600px,此时显示像素还是120*60,但是canvas的长宽已经变了)

  • 6
    点赞
  • 0
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值