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. 武汉科技大学ACM :1002: 零起点学算法38——求阶乘和

    Problem Description 输入一个正整数n(n<=10),计算 S=1!+2!+3!+...+n! Input 输入一个正整数n(n<=10)(多组数据) Output 输出 ...

  2. 转 常用JQuery插件整理

    虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...

  3. destoon程序中qq号码,手机号,msn必选项实现方法

    最近发现好多客户,信息不完全!还是把qq号码,手机号,msn设为必选项比较好!下面以把qq设为必选项为例找到模板 template/default/member/edit.htm 找到 functio ...

  4. 复杂事件处理引擎—Esper入门

    说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...

  5. IE中对于stylesheet的个数限制

    对于IE6-9: 1.样式规则最多只能有4095个,多于这个数目的会被忽略: 2.样式表(通过@import, <link> 或 <style>)最多可以有31个(总和),多于 ...

  6. Baidu Map Web API 案例

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  7. Ubuntu 下升级git到最新版

    $ sudo add-apt-repository ppa:git-core/ppa $ sudo apt-get update $ sudo apt-get install git

  8. 51单片机C语言学习笔记6:51单片机C语言头文件及其使用

    很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...

  9. 【转】android如何查看cpu的占用率和内存泄漏

    原文网址:http://www.cnblogs.com/yejiurui/p/3472765.html 在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程 ...

  10. B树——思路、及C语言代码的实现

    0.序 本人现读本科大二,这学期学习数据结构,老师为我们的期末作业布置一道任选题,而我一直以来都有听说B树是一棵挺神奇的树,所以我选择了它,当然更重要的原因是因为B树的难度最高,我喜欢做有挑战性的工作 ...