HTML5应用-----canvas 实例,图片旋转 IE+ FF OP CH 兼容
2011-10-19 03:48
846 查看
写在前面:以前写过一篇日志。说未来互联网的相册将可以实现任意旋转。当时还不了解javascript,如今算是略懂皮毛。在HTML5来临时代,就试试一把。
在浏览微博的时候看到很多插入图片都可以实现旋转,就好奇是怎么实现的。也想检验一下最近学习的javascript效果。记录学习过程。
HTML5中的canvas介绍是:
HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
画布是一个矩形区域,您可以控制其每一像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
示例: 图片右旋转90度 !IE
View Code
// 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 :
case 0 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(0 * Math.PI / 180);
canvasContext.drawImage(img, 0, 0);
break;
case 1 :
c.setAttribute('width', img.height);
c.setAttribute('height', img.width);
canvasContext.rotate(90 * Math.PI / 180);
canvasContext.drawImage(img, 0, -img.height);
break;
case 2 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(180 * Math.PI / 180);
canvasContext.drawImage(img, -img.width, -img.height);
break;
case 3 :
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);
} else if(e.className == 'btnPrev'){
(n==3)? n=0:n++;
degree(n,img);
}
}
// ]]>
向左转|向右转
![](http://images.cnblogs.com/cnblogs_com/noyobo/328764/o_460.jpg)
以上实现基本原理. 如果要引用到项目中,还需要获取 相应的 canvas .
在浏览微博的时候看到很多插入图片都可以实现旋转,就好奇是怎么实现的。也想检验一下最近学习的javascript效果。记录学习过程。
HTML5中的canvas介绍是:
HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
画布是一个矩形区域,您可以控制其每一像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
示例: 图片右旋转90度 !IE
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>
// 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 :
case 0 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(0 * Math.PI / 180);
canvasContext.drawImage(img, 0, 0);
break;
case 1 :
c.setAttribute('width', img.height);
c.setAttribute('height', img.width);
canvasContext.rotate(90 * Math.PI / 180);
canvasContext.drawImage(img, 0, -img.height);
break;
case 2 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(180 * Math.PI / 180);
canvasContext.drawImage(img, -img.width, -img.height);
break;
case 3 :
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);
} else if(e.className == 'btnPrev'){
(n==3)? n=0:n++;
degree(n,img);
}
}
// ]]>
向左转|向右转
![](http://images.cnblogs.com/cnblogs_com/noyobo/328764/o_460.jpg)
以上实现基本原理. 如果要引用到项目中,还需要获取 相应的 canvas .
相关文章推荐
- JS图片放大查看效果! (代码全部重构,兼容IE,FF,OP,简单,健壮)
- Javascript与HTML5的canvas实现图片旋转效果
- Js(javascript)图片预载类。兼容IE,firefox(FF)
- IE/FF/OP兼容的JavaScript放大镜( magnifying glass by JS work in IE/FF/OP)
- IE.火狐中href 兼容的注意事项 ,应用中的删除自己所在行数据,在IE上可用,在FF,谷歌等不可用的问题
- 深度剖析IE10对HTML5 Canvas支持及实例教程(一)
- JS图片预览,兼容FF和IE
- 跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
- Canvas的应用,图片的移动、旋转、缩放
- JS网页图片查看器-可控制图片放大缩小移动|兼容IE、FF
- 网站图片增强JS插件2.0(兼容IE&FF)
- 兼容IE和FF的图片上传前预览js代码
- HTML5---Canvas-画线,空心图,矩形,文字,三角形,旋转图片
- js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
- javascript获取鼠标位置部分的实例代码(兼容IE,FF)
- HTML5 Canvas显示本地图片实例1
- JS网页图片查看器-可控制图片放大缩小移动|兼容IE、FF
- javascript获取鼠标位置部分的实例代码(兼容IE,FF)
- js加入收藏夹代码(兼容ie/ff/op)
- CSS之IE与FF,SF,OP兼容