Canvas实现图片放大缩小移动操作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Canvas实现图片放大缩小移动操作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2753字,纯文字阅读大概需要4分钟。
内容图文
对于HTML5相信大家都不陌生,很早就出来了,但是貌似都没有真正的使用过。最近做项目时要实现这样一个需求:一个图片,大小不固定,要求能实现类似地图一样放大、缩小、移动功能。这里就很合适使用html5的canvas画布。
实现步骤如下:
1. 定义一个canvas标签。
<canvas id="bargraphCanvas" width="500" height="600"></canvas>
这里有个很重要的地方,就是这个width和height一定要写,否则不能实现。同时,画布的宽高只能用这个方法写,css设置有问题。大家可以试试。
2.初始化canvas,以及其他所需对象。
var canvas, context; var img,//图片对象 imgIsLoaded,//图片是否加载完成; imgX = 0, imgY = 0, imgScale = 1; (function int() { canvas = document.getElementById(‘bargraphCanvas‘); //画布对象 context = canvas.getContext(‘2d‘);//画布显示二维图片 loadImg(); })();
3.定义一个image对象并设置好它的onload事件和src属性。
function loadImg() { img = new Image(); img.onload = function () { imgIsLoaded = true; drawImage(); } img.src = ‘../../Content/images/mayday.jpg‘; }
4.调用canvas的draw方法。
function drawImage() { context.clearRect(0, 0, canvas.width, canvas.height); context.drawImage( img, //规定要使用的图像、画布或视频。 0, 0, //开始剪切的 x 坐标位置。 img.width, img.height, //被剪切图像的高度。 imgX, imgY,//在画布上放置图像的 x 、y坐标位置。 img.width * imgScale, img.height * imgScale //要使用的图像的宽度、高度 );}
这里要介绍下canvas的drawImage方法,参考w3school,drawImage是可以实现图片的裁剪功能,参数的含义以及是否必填如下:
** img 规定要使用的图像、画布或视频。
** sx 可选。开始剪切的 x 坐标位置。
** sy 可选。开始剪切的 y 坐标位置。
** swidth 可选。被剪切图像的宽度。
** sheight 可选。被剪切图像的高度。
** x 在画布上放置图像的 x 坐标位置。
** y 在画布上放置图像的 y 坐标位置。
** width 可选。要使用的图像的宽度。(伸展或缩小图像)
** height 可选。要使用的图像的高度。(伸展或缩小图像)
5.到这里,如果代码没有问题的话,图片就可以成功地在canvas中显示了。下面就是实现放大、缩小、平移操作。在初始化canvas的同时也初始化其事件,如下:
/*事件注册*/ function canvasEventsInit() { canvas.onmousedown = function (event) { var pos = windowToCanvas(event.clientX, event.clientY); //坐标转换,将窗口坐标转换成canvas的坐标 canvas.onmousemove = function (evt) { //移动 canvas.style.cursor = ‘move‘; var posl = windowToCanvas(evt.clientX, evt.clientY); var x = posl.x - pos.x; var y = posl.y - pos.y; pos = posl; imgX = x; imgY = y; drawImage(); //重新绘制图片 }; canvas.onmouseup = function () { canvas.onmousemove = null; canvas.onmouseup = null; canvas.style.cursor = ‘default‘; }; }; canvas.onmousewheel = canvas.onwheel = function (event) { //滚轮放大缩小 var pos = windowToCanvas (event.clientX, event.clientY); event.wheelDelta = event.wheelDelta ? event.wheelDelta : (event.deltalY * (-40)); //获取当前鼠标的滚动情况 if (event.wheelDelta > 0) { imgScale *= 2; imgX = imgX * 2 - pos.x; imgY = imgY * 2 - pos.y; } else { imgScale /= 2; imgX = imgX * 0.5 pos.x * 0.5; imgY = imgY * 0.5 pos.y * 0.5; } drawImage(); //重新绘制图片 }; } /*坐标转换*/ function windowToCanvas(x,y) { var box = canvas.getBoundingClientRect(); //这个方法返回一个矩形对象,包含四个属性:left、top、right和bottom。分别表示元素各边与页面上边和左边的距离 return { x: x - box.left - (box.width - canvas.width) / 2, y: y - box.top - (box.height - canvas.height) / 2 }; }
按照这些步骤,图片的加载,放大、缩小、平移都已经实现了。个人感觉这个比较难的地方在于,这个是使用原生javascript写的,如果使用jquery会不会简单些,以后有时间再试试吧。目前效果如下:
原文:http://www.cnblogs.com/airbreak/p/4595494.html
内容总结
以上是互联网集市为您收集整理的Canvas实现图片放大缩小移动操作全部内容,希望文章能够帮你解决Canvas实现图片放大缩小移动操作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。