canvas 图片鼠标区域放大细节

本文介绍了如何利用HTML5的canvas元素实现图片的鼠标区域放大功能,详细讲解了相关技术点,包括监听鼠标事件、获取鼠标位置、绘制放大图像等步骤,帮助读者理解并实现图片细节查看的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >






<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>图片鼠标区域放大细节</title>
	</head>
	<style>
		body{background: #666;margin: 0;padding: 0;	}
		input{
		    display: block;
		    margin: 20px auto;
    		}

	</style>
	<body>
		<canvas id="kycanvas" style="display: block;margin:0 auto; border: 1px solid darksalmon;margin-top: 100px;">
			当前浏览器不支持canvas,请更换浏览器后再试!
		</canvas>
		<canvas id="offCanvas" style="display: none;"></canvas>
	</body>
	<script>
		var canvas = document.getElementById("kycanvas");//选取画布
		var context = canvas.getContext("2d");//创建context对象
		
		var offCanvas = document.getElementById("offCanvas");//选取画布
		var offContext = offCanvas.getContext("2d");//创建context对象
		var scale;
		var image = new Image();
		var isMouseDown = false;
		window.onload = function (){
			canvas.width = 400;//画布宽
			canvas.height = 400;	//画布高	
			image.src = "images/im1.jpg";//图片地址
			image.onload = function(){ //图片加载完毕
				offCanvas.width = image.width;
				offCanvas.height = image.height;
				scale = offCanvas.width / canvas.width;
				context.drawImage(image,0,0,canvas.width,canvas.height);
				offContext.drawImage(image,0,0);
			};
		};
		function windowToCanvas(x,y){//获取画布上坐标点
			var bbox = canvas.getBoundingClientRect();
			return { x : x - bbox.left , y : y - bbox.top };
		};
		canvas.onmousedown = function (e){
			e.preventDefault(); //去默认事件
			var point = windowToCanvas(e.clientX , e.clientY); 
			console.log(point.x , point.y);
			isMouseDown = true;
			drawCanvasWithMagnifier(true , point)
		};
		canvas.onmousemove = function (e){
			e.preventDefault(); //去默认事件
			if(isMouseDown == true){
				var point = windowToCanvas(e.clientX , e.clientY); 
				console.log(point.x , point.y);	
				drawCanvasWithMagnifier(true , point)
			}
		};
		canvas.onmouseup = function (e){
			e.preventDefault(); //去默认事件
			isMouseDown = false;
			drawCanvasWithMagnifier(false);
		};		
		canvas.onmouseout = function (e){
			e.preventDefault(); //去默认事件
			isMouseDown = false;
			drawCanvasWithMagnifier(false);
		};		
		function drawCanvasWithMagnifier(isShowMagnifier , point){
			context.clearRect(0,0,canvas.width,canvas.height);
			context.drawImage(image,0,0,canvas.width,canvas.height);
			if(isShowMagnifier == true){
				drawMagnifier(point);
			}
		}
		function drawMagnifier(point){
			var imageLG_cx = point.x * scale;
			var imageLG_cy = point.y * scale;
			var mr = 100;
			var sx = imageLG_cx - mr;
			var sy = imageLG_cy - mr;
			
			var dx = point.x - mr;
			var dy = point.y - mr;
			
			
			context.drawImage(offCanvas, sx , sy , 2*mr , 2*mr , dx , dy , 2*mr , 2*mr);
			
		}
	</script>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值