1.前台代码

<canvas id="canvasOne" class="myCanvas" width="500" height="500"></canvas>
<script>
/***************绘制图像,放大缩小实例******************/
var canvas = document.getElementById('canvasOne');
var ctx = canvas.getContext('2d');
//加载图片
var scale = 0.1;//缩放比例
var img = new Image();
img.onload = function () {
reShow();
}
img.src = '../images/1.jpg';
//根据缩放比例,显示图片
function reShow() {
var cWidth = canvas.width;
var cHeight = canvas.height; var iWidth = img.width;
var iHeight = img.height;
var width = iWidth * scale;
var height = iHeight * scale; //居中显示
var left = (cWidth - width) / 2;
var top = (cHeight - height) / 2; //清空画布极限值 --失败
//var maxWidth = iWidth > width ? iWidth : width;
//var maxHeight = iHeight > height ? iHeight : height;
//var minLeft = left < 0 ? left : 0;
//var minTop = top < 0 ? top : 0;
//ctx.clearRect(0,0,cWidth,cHeight); //清除画布方式2 --失败
//var number = 1 / scale;
//var cWidth = canvas.width * number;
//var cHeight = canvas.height * number;
//ctx.clearRect(-cWidth, -cHeight, cWidth * 2, cHeight * 2); //清除画布3
ctx.clearRect(-spanLeft, -spanTop, canvas.width, canvas.height);
ctx.drawImage(img, left, top, width, height);
}
//滚轮时间
addMouseWheel(canvas, function (e) {
var temp = e.delta > 0 ? 0.1 : -0.1;
scale += temp;
//缩放极限判断
scale = scale < 0.1 ? 0.1 : scale;
scale = scale > 1 ? 1 : scale;
reShow();
}); //鼠标移动事件
//1.有一个鼠标移动,重绘图片的bug
var oldX = oldY = 0;
var isMove = false;
var spanLeft = spanTop = 0;
canvas.onmousedown = function (e) {
oldX = e.clientX;
oldY = e.clientY;
isMove = true;
}
canvas.onmousemove = function (e) {
if (isMove) {
var currentX = e.clientX;
var currentY = e.clientY; //计算移动的距离
var spanX = currentX - oldX;
var spanY = currentY - oldY;
spanLeft += spanX;
spanTop += spanY;
ctx.translate(spanX, spanY);
reShow(); //记录当前结果
oldX = currentX;
oldY = currentY;
}
}
canvas.onmouseup = function (e) {
oldX = oldY = 0;
isMove = false;
}
canvas.onmouseleave = function (e) {
oldX = oldY = 0;
isMove = false;
} </script>

2.绑定鼠标滚轮事件

//绑定dom  元素的mousewheel 事件
//并设置 对应滚动的是 e.detlta >0 向上滚动 <0 向下滚动
(function (window) {
window.addMouseWheel = function (dom, hander) {
if (document.mozHidden !== undefined) {
//FF
dom.addEventListener('DOMMouseScroll', function (e) {
e.delta = -(e.detail || 0) / 3
hander(e);
})
} else {
if (window.addEventListener) {
//IE,google 等
dom.addEventListener('mousewheel', function (e) {
e.delta = e.wheelDelta / 120;
hander(e);
});
} else if (window.attachEvent) {
// IE 低版本
dom.attachEvent('onmousewheel', function (e) {
e.delta = e.wheelDelta / 120;
hander(e);
});
}
}
}
})(window);

显示结果:

HTML5 Canvas图像放大、移动实例1的更多相关文章

  1. HTML5 Canvas图片操作简单实例1

    1.加载显示图片 <canvas id="canvasOne" class="myCanvas" width="500" height ...

  2. html5 canvas 圆形抽奖的实例

    年底没啥,抽空学习了canvas,写了个html5抽奖的代码,造了个轮子,有用的童鞋可以拿走. 其中,canvas.onclick触发抽奖行为,概率可以在core.lottery()函数上添加,美化也 ...

  3. HTML5 canvas图像绘制方法与像素操作属性和方法

    图像绘制方法 drawImage()        向画布上绘制图像.画布或视频 像素操作属性和方法 width                                返回 ImageData ...

  4. HTML5 Canvas Text文本居中实例

    1.代码: <canvas width="700" height="300" id="canvasOne" class="c ...

  5. HTML5 Canvas显示本地图片实例1、Canvas预览图片实例1

    1.前台代码: <input id="fileOne" type="file" /> <canvas id="canvasOne&q ...

  6. html5 canvas画不出图像的原因

    很久没写博客了,今年过年的时候,家里出了意外,现在心里依然很难受.6月份之前一直忙着写毕业论文,答辩完6月初回公司继续上班,今天刚好周末有空,就写下之前碰到一个问题. 做一个图像查看器(基于Chrom ...

  7. 【HTML5】Canvas图像

    把一幅图像放置到画布上, 使用以下方法: drawImage(Img,x,y); 注:这里的Img必须是一个图像对象.   显示一个canvas图像: <!DOCTYPE html> &l ...

  8. HTML5<canvas>标签:使用canvas元素在网页上绘制渐变和图像(2)

    详细解释HTML5 Canvas中渐进填充的参数设置与使用,Canvas中透明度的设置与使用,结合渐进填充与透明度支持,实现图像的Mask效果. 一:渐进填充(Gradient Fill) Canva ...

  9. html5 canvas用动画的形式装载图像

    本示例使用HTML5 canvas,简单的编写了装载图片效果, 请使用支持HTML5的浏览器预览效果: 下图为以逐渐横向栅格的效果图 html部分: <!DOCTYPE html> < ...

随机推荐

  1. Java知识整理一

    文档二 密码:java

  2. 极度郁闷的错误调试——ajax jquery

     今天在写一个简单邮件验证的页面时,本来以为二十分钟的事情,却调试了一个半小时,简直郁闷,具体的错误如下: 在页面中,有一段如下的代码: <td colspan="3"> ...

  3. void *memmove( void* dest, const void* src, size_t count );数据拷贝,不需要CPU帮助

    分享到 腾讯微博 QQ空间 新浪微博 人人网 朋友网 memmove 编辑词条 编辑词条 -->   memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,m ...

  4. Integer和int的详细比较(转)

    Integer与int的区别我们耳熟详的有两点:1.Integer是int的包装类.2.Integer的默认初始值是null,而int的默认初试值是0. 下面通过代码进行详细比较. public cl ...

  5. 类似百度音乐唱片播放时CD图片不停旋转的实现

    类似百度音乐唱片播放时CD图片不停旋转的实现 效果图 1 html代码 2 <imgsrc="img/logo.png"class="img-responsive& ...

  6. PHP 过滤二维数组和三维数组

    <?php $arr = [ [1,3,5,7,9], [2,4,6,8,0] ]; $arr2 = [ 'list' => [ [1,3,5,7], [2,4,6,8], [3,2,9, ...

  7. Linux中判断大小端的一种方法

    大小端的定义无需赘言,常用的方法有使用联合体和指针法,如: int checkCPU() { union w { int a; char b; }c; c.a = 1; return (c.b == ...

  8. Matlab 矩阵运算

    1.Syms 和sym的区别: syms是定义多个符号是符号变量的意思 sym只能定义一个符号变量,但可以具体到这个符号变量的内容 例:syms f z; %定义下x和y f=sym('a+b+c') ...

  9. 浅析门户网站体育赛事CDN加速解决方案

    经过近些年来的高速发展,互联网已经成为现今媒体传播的主要力量.这一点在大型体育赛事的报道与转播上,体现的尤为明显.更及时的信息内容.更多样的报道形式.更齐全的资料组成.更方便的阅读查询.更具互动性的报 ...

  10. 黑马程序员_JavaIO流(二)

    字符流的缓冲区 缓冲区的出现提高了对数据的读写效率. 对应类: BufferedWriter BufferedReader 缓冲区要结合流才可以使用. 在流的基础上对流的功能进行了增强. Buffer ...