利用html5中canvas实现类似淘宝的放大图片效果

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<!-- 这里定义原始图片,设置鼠标移动到图片上触发的函数,已经离开图片触发的函数 -->
<img id="eagle" onmousemove="maxpicture(event)" onmouseleave="quitPicture(event)"/> 
<!-- 这里设置画板,展示图片放大后的效果图 -->
<div id="mydiv"><canvas id="mcanvas" width="800" height="600"></canvas></div>
<script type="text/javascript">
var image=document.getElementById("eagle");
var divi=document.getElementById("mydiv");
image.src="eagle.jpg";  //原图片地址
var sizefactor=0.3;
//原始图片装载完成后触发的事件,将原图进行了缩放显示
image.onload=function()
{ //获取原始图片的长宽
  var originX=image.width;
  var originY=image.height;
  
  image.width=originX*sizefactor;
  image.height=originY*sizefactor;
 }
//鼠标离开原图触发的事件
image.quitPicture=function(event)
{
    //原图所在的位置是div元素内,因此将canvas元素进行了删除
   	if(divi.hasChildNodes())
	{ divi.removeChild(divi.lastChild);
	}
}
//放大图片触发的时间事件
function maxpicture(event)
{
    var mouseX=event.offsetX; //定位鼠标所在的坐标(图片上坐标)
	var mouseY=event.offsetY;
	if(divi.hasChildNodes())   //这个事件是一个反复触发的过程,因此删除上一次绘制的画板重新绘制
	{ divi.removeChild(divi.lastChild);
	}
	//设置新创建的画板的属性
	var newCanvas=document.createElement("canvas");
	newCanvas.width=500;newCanvas.height=500;
	newCanvas.style.border="0.2px solid black";
	//向div中添加新的画板
	divi.appendChild(newCanvas);
	var newCtx=newCanvas.getContext('2d');
	//画板的区域是500*500,新绘制的大图是1000*1000,所有有一部分被忽略绘制
	//因为绘制所开始的区域是从画板左上方开始绘制,如果想让鼠标所在的点成为画板中心区域,对应原图坐标需要减去250,250
	//又因为原图和画板图片的比例尺为1:2,因此对应原图减去125,125
	newCtx.drawImage(image,(mouseX)/sizefactor-125,(mouseY)/sizefactor-125,500,500,0,0,1000,1000);
	
}

</script>

</body>

</html>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值