HTML5 Canvas图像放大、移动实例1
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的更多相关文章
- HTML5 Canvas图片操作简单实例1
1.加载显示图片 <canvas id="canvasOne" class="myCanvas" width="500" height ...
- html5 canvas 圆形抽奖的实例
年底没啥,抽空学习了canvas,写了个html5抽奖的代码,造了个轮子,有用的童鞋可以拿走. 其中,canvas.onclick触发抽奖行为,概率可以在core.lottery()函数上添加,美化也 ...
- HTML5 canvas图像绘制方法与像素操作属性和方法
图像绘制方法 drawImage() 向画布上绘制图像.画布或视频 像素操作属性和方法 width 返回 ImageData ...
- HTML5 Canvas Text文本居中实例
1.代码: <canvas width="700" height="300" id="canvasOne" class="c ...
- HTML5 Canvas显示本地图片实例1、Canvas预览图片实例1
1.前台代码: <input id="fileOne" type="file" /> <canvas id="canvasOne&q ...
- html5 canvas画不出图像的原因
很久没写博客了,今年过年的时候,家里出了意外,现在心里依然很难受.6月份之前一直忙着写毕业论文,答辩完6月初回公司继续上班,今天刚好周末有空,就写下之前碰到一个问题. 做一个图像查看器(基于Chrom ...
- 【HTML5】Canvas图像
把一幅图像放置到画布上, 使用以下方法: drawImage(Img,x,y); 注:这里的Img必须是一个图像对象. 显示一个canvas图像: <!DOCTYPE html> &l ...
- HTML5<canvas>标签:使用canvas元素在网页上绘制渐变和图像(2)
详细解释HTML5 Canvas中渐进填充的参数设置与使用,Canvas中透明度的设置与使用,结合渐进填充与透明度支持,实现图像的Mask效果. 一:渐进填充(Gradient Fill) Canva ...
- html5 canvas用动画的形式装载图像
本示例使用HTML5 canvas,简单的编写了装载图片效果, 请使用支持HTML5的浏览器预览效果: 下图为以逐渐横向栅格的效果图 html部分: <!DOCTYPE html> < ...
随机推荐
- Eclipse读取xml中文乱码问题解决
解决eclipse读取xml时中文乱码报错问题 在eclipse.ini中加入下而一行 -Dfile.encoding=UTF-8
- c语言学习,模拟栈操作
1.stack.c模拟栈操作函数的实现 #include<stdio.h> #include<stdlib.h> ; static char *stack;//数据栈 ;//栈 ...
- JS-商品图片点击轮换
//小图预览区域图片轮换键const LIWIDTH=62;var moveCount=0;document.getElementById("btForward").onclick ...
- 高性能Socket组件和RPC,让你像写本地代码一样开发网络应用和分布式程序
最近想试试C#能不能写出高性能的分布式组件,于是写了一个双工RPC,也当练手,下面是单连接的测试结果,非常给力.机器配置:U:E1230-v2,内存:ddr3-8G 1.递归调用 过程:Clie ...
- Facebook和Google如何激发工程师的创造力
http://taiwen.lofter.com/post/664ff_ad8a15 今天终于“朝圣”了两个伟大的公司——Facebook和Google,对创造力和驱动力的来源有了更多的理解,尤其是对 ...
- Notepad++ Java开发环境配置
1. 安装JDK 下载JDK 6下载 http://developers.sun.com.cn/download/java_se.html 运行安装程序,按照屏幕提示完成JDK 6的安装,下面为安装路 ...
- 一个简单LINUX程序的逆向
开始之前的准备: 反汇编:IDA 十六进制编辑器: Hexworkshop LINUX环境: KALI LINUX 调试: EDB (KALI自带的) 一个简单的动态追码, 大牛们就略过吧…… 用16 ...
- Android进阶2之PopupWindow弹窗(有点悬浮窗的感觉)
PopupWindow是一个可以用来显示一个任意的视图的弹出窗口,他需要完全依赖layout布局. 它没什么界面,在弹出的窗口中完全显示布局中的控件. 上面两个美女头就是弹窗PopupWindow显示 ...
- android弹出式菜单、弹出式对话框、弹出式窗口
http://www.open-open.com/lib/view/open1389767042601.html http://www.open-open.com/lib/view/open13321 ...
- Entity Framewor 学习笔记 (碎碎的东西)
Proxy 类代理类是为了让EF实现lazy load才需要的 public class BloggingContext : DbContext { public BloggingContex ...