HTML5应用-----canvas 实例,图片旋转 IE+ FF OP CH 兼容

写在前面:以前写过一篇日志。说未来互联网的相册将可以实现任意旋转。当时还不了解javascript,如今算是略懂皮毛。在HTML5来临时代,就试试一把。

在浏览微博的时候看到很多插入图片都可以实现旋转,就好奇是怎么实现的。也想检验一下最近学习的javascript效果。记录学习过程。

HTML5中的canvas介绍是:

HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。

画布是一个矩形区域,您可以控制其每一像素。

canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

示例: 图片右旋转90度  !IE

View Code
<!DOCTYPE HTML>
<html>
<body>

<canvas id="myCanvas" width="700" height="433" style="border:1px solid #c3c3c3;">
你的浏览器不支持canvas 元素。
</canvas>
<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
var img=new Image()
img.src
="http://images.cnblogs.com/cnblogs_com/noyobo/328764/o_460.jpg"
cxt.rotate(
90* Math.PI /180);
cxt.drawImage(img,
0,-700);
</script>
</body>
</html>

用到了3个方法

getContext() 方法返回一个用于在画布上绘图的环境。

rotate() 方法旋转画布的坐标系统。

drawImage() 方法绘制一幅图像。

 

IE CSS滤镜中:progid:DXImageTransform.Microsoft.BasicImage(rotation='N')  旋转效果 以顺时针 90*N(Integer)

示例:图片右旋转90度  IE

点击展开
<!DOCTYPE html>
<html>
<head>
<title>IE 图片旋转滤镜</title>
<meta charset="gb2312">
<style type="text/css">
img
{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation='1')}
</style>
</head>
<body>
<div class="cont">
<img id="pic_1" src="http://images.cnblogs.com/cnblogs_com/noyobo/328764/o_460.jpg" alt="">
</div>
</body>
</html>

 

从上述2个例子可以基本定义思路. 要对 IE 浏览器判断处理 需 记录 N 的旋转值.

!IE 浏览器中需动态更改 rotate()角度 与 drawImage() 坐标。

View Code
<!DOCTYPE html>
<html>
<head>
<title>IE 图片旋转滤镜</title>
<meta charset="gb2312">
<style>
.blue
{color:blue;}
</style>
<script>
var n =0;
var ua = navigator.userAgent,
isIE
=/msie/i.test(ua) &&!window.opera;
function degree(n,img){
if(isIE){
img.style.filter
='progid:DXImageTransform.Microsoft.BasicImage(rotation='+ n +')';
}
else{
if(img.parentNode.children.length ==1){
img.style.visibility
='hidden';
img.style.position
='absolute';
c
= document.createElement('canvas');
img.parentNode.appendChild(c);
}
var canvasContext = c.getContext('2d');
switch(n) {
default :
case0 :
c.setAttribute(
'width', img.width);
c.setAttribute(
'height', img.height);
canvasContext.rotate(
0* Math.PI /180);
canvasContext.drawImage(img,
0, 0);
break;
case1 :
c.setAttribute(
'width', img.height);
c.setAttribute(
'height', img.width);
canvasContext.rotate(
90* Math.PI /180);
canvasContext.drawImage(img,
0, -img.height);
break;
case2 :
c.setAttribute(
'width', img.width);
c.setAttribute(
'height', img.height);
canvasContext.rotate(
180* Math.PI /180);
canvasContext.drawImage(img,
-img.width, -img.height);
break;
case3 :
c.setAttribute(
'width', img.height);
c.setAttribute(
'height', img.width);
canvasContext.rotate(
270* Math.PI /180);
canvasContext.drawImage(img,
-img.width, 0);
break;
};
}
}
function rotate(e){
var img = e.parentNode.parentNode.getElementsByTagName("img")[0];
if(e.className =='btnBack'){
(n
==0)? n=3:n--;
degree(n,img);
}
elseif(e.className =='btnPrev'){
(n
==3)? n=0:n++;
degree(n,img);
}
}
</script>
</head>
<body>
<div class="picBox big">
<div class="tools">
<a class="btnBack" onclick="rotate(this)">向左转</a><span>|</span><a class="btnPrev" onclick="rotate(this)">向右转</a>
</div>
<a class="pic">
<img src="http://images.cnblogs.com/cnblogs_com/noyobo/328764/o_460.jpg" alt="">
</a>
</div>
</body>
</html>

 

 
以上实现基本原理. 如果要引用到项目中,还需要获取 相应的 canvas .
posted @ 2011-10-19 03:48  noyobo  阅读(1000)  评论(0编辑  收藏  举报