欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js實(shí)現(xiàn)圖片旋轉(zhuǎn)的三種方法

 更新時(shí)間:2014年04月10日 15:28:38   作者:  
這篇文章主要介紹了js實(shí)現(xiàn)圖片旋轉(zhuǎn)的三種方法,需要的朋友可以參考下
1 使用jQueryRotate.js實(shí)現(xiàn)

示例代碼:
復(fù)制代碼 代碼如下:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#div1 {
width: 800px;
height: 600px;
background-color: #ff0;
position: absolute;
}
.imgRotate {
width: 100px;
height: 80px;
position: absolute;
top: 50%;
left: 50%;
margin: -40px 0 0 -50px;
}
</style>
</head>
<body>
<div id="div1">
<img id="img1" class="imgRotate" src="http://www.baidu.com/img/logo-yy.gif" />
<input id="input2" type="button" value="btn2"></input>
</div>
</body>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jQueryRotate.js"></script>
<script type="text/javascript">
var num = 0;
$("#input2").click(function(){
num ++;
$("#img1").rotate(90*num);
});
</script>
</html>

測(cè)試結(jié)果:chrome下效果正常,旋轉(zhuǎn)后img對(duì)象仍為img對(duì)象;ie8下效果正常,但旋轉(zhuǎn)后img對(duì)象變?yōu)橄旅鎸?duì)象,由于對(duì)象變化,若旋轉(zhuǎn)后仍按原來方法獲取img對(duì)象,則會(huì)報(bào)js錯(cuò)誤。欲獲取image對(duì)象,可根據(jù)class獲取。如果圖像旋轉(zhuǎn)后,不進(jìn)行其它操作,則可用此方法。若進(jìn)行其它操作,如放大、縮小圖像,則此方法實(shí)現(xiàn)較復(fù)雜。
復(fù)制代碼 代碼如下:

<span ...>
<rvml:group class="rvml"...>
<rvml:image class="rvml".../>
</rvml:group>
</span>

2 使用Microsoft提供的Matrix對(duì)象

示例代碼:
復(fù)制代碼 代碼如下:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#div1 {
width: 800px;
height: 600px;
background-color: #ff0;
position: absolute;
}
.imgRotate {
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
}
#imgRotate {
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
}
</style>
</head>
<body>
<div id="div1">
<img id="img1" class="imgRotate" src="http://www.baidu.com/img/logo-yy.gif" />
<input id="input1" type="button" value="btn1"></input>
</div>
</body>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function rotate(id,angle,whence) {
var p = document.getElementById(id);

// we store the angle inside the image tag for persistence
if (!whence) {
p.angle = ((p.angle==undefined?0:p.angle) + angle) % 360;
} else {
p.angle = angle;
}

if (p.angle >= 0) {
var rotation = Math.PI * p.angle / 180;
} else {
var rotation = Math.PI * (360+p.angle) / 180;
}
var costheta = Math.cos(rotation);
var sintheta = Math.sin(rotation);

if (document.all && !window.opera) {
var canvas = document.createElement('img');

canvas.src = p.src;
canvas.height = p.height;
canvas.width = p.width;

canvas.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11="+costheta+",M12="+(-sintheta)+",M21="+sintheta+",M22="+costheta+",SizingMethod='auto expand')";
} else {
var canvas = document.createElement('canvas');
if (!p.oImage) {
canvas.oImage = new Image();
canvas.oImage.src = p.src;
} else {
canvas.oImage = p.oImage;
}

canvas.style.width = canvas.width = Math.abs(costheta*canvas.oImage.width) + Math.abs(sintheta*canvas.oImage.height);
canvas.style.height = canvas.height = Math.abs(costheta*canvas.oImage.height) + Math.abs(sintheta*canvas.oImage.width);

var context = canvas.getContext('2d');
context.save();
if (rotation <= Math.PI/2) {
context.translate(sintheta*canvas.oImage.height,0);
} else if (rotation <= Math.PI) {
context.translate(canvas.width,-costheta*canvas.oImage.height);
} else if (rotation <= 1.5*Math.PI) {
context.translate(-costheta*canvas.oImage.width,canvas.height);
} else {
context.translate(0,-sintheta*canvas.oImage.width);
}
context.rotate(rotation);
context.drawImage(canvas.oImage, 0, 0, canvas.oImage.width, canvas.oImage.height);
context.restore();
}
canvas.id = p.id;
canvas.angle = p.angle;
p.parentNode.replaceChild(canvas, p);
}

function rotateRight(id,angle) {
rotate(id,angle==undefined?90:angle);
}

function rotateLeft(id,angle) {
rotate(id,angle==undefined?-90:-angle);
}
$("#input1").click(function(){
$("img.imgRotate").attr("id","imgRotate");
rotateLeft("imgRotate",90);
$("#imgRotate").attr("top","50%");
$("#imgRotate").attr("left","50%");
$("#imgRotate").attr("margin","-50px 0 0 -50px");
});
</script>
</html>

測(cè)試結(jié)果:chrome下效果正常,但旋轉(zhuǎn)后img對(duì)象變?yōu)閏anvas對(duì)象;ie8下效果正常,旋轉(zhuǎn)后img對(duì)象仍為img對(duì)象。Matrix()參數(shù)較多,使用時(shí)需較多計(jì)算。

3 使用Microsoft提供的BasicImage對(duì)象

示例代碼:
復(fù)制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<img id="image" src="http://www.baidu.com/img/logo-yy.gif" />
<input id="input2" type="button" value="btn2"></input>
</body>
<script type="text/javascript" src="jquery.min.js"></script>

<script type="text/javascript">
var num = 0;
$("#input2").click(function(){
num = (num + 1) % 4;
document.getElementById('image').style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+num+')';
});
</script>
</html>

測(cè)試結(jié)果:chrome下不能旋轉(zhuǎn);ie8下效果正常,旋轉(zhuǎn)后img對(duì)象仍為img對(duì)象。BasicImage()僅一個(gè)參數(shù)。

查看這三種方法的代碼會(huì)發(fā)現(xiàn),本質(zhì)上是一種解決方案:chrome下使用canvas對(duì)象實(shí)現(xiàn),ie8下使用VML或者M(jìn)atrix()或BasicImage()實(shí)現(xiàn)。本人近期改造一個(gè)組件:其中涉及到旋轉(zhuǎn)、放大圖片,由于jQueryRotate.js在ie8下會(huì)生成一個(gè)新的對(duì)象,導(dǎo)致放大圖片前選擇圖片時(shí),需要進(jìn)行特殊處理。后決定對(duì)chrome、ie8分開處理,chrome下使用jQueryRotate實(shí)現(xiàn),ie8下使用BasicImage()實(shí)現(xiàn),保證了代碼的簡(jiǎn)潔性和可讀性。

相關(guān)文章

最新評(píng)論