js实现图⽚旋转的三种⽅法
1 使⽤jQueryRotate.js实现
⽰例代码:
复制代码代码如下:
<!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>
playbasketball
<div id="div1">
<img id="img1" class="imgRotate" src="/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>
测试结果:chrome下效果正常,旋转后img对象仍为img对象;ie8下效果正常,但旋转后img对象变为下⾯对象,由于对象变化,若旋转后仍按原来⽅法获取img对象,则会报js错误。欲获取image对象,可根据class获取。如果图像旋转后,不进⾏其它操作,则可⽤此⽅法。若进⾏其它操作,如放⼤、缩⼩图像,则此⽅法实现较复杂。
复制代码代码如下:
<span ...>
<rvml:group class="rvml"...>
<rvml:image class="rvml".../>
</rvml:group>
</span>
2 使⽤Microsoft提供的Matrix对象
⽰例代码:
复制代码代码如下:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#div1 {
kop
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 {
hm怎么读width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
}
</style>
</head>
<body>
ernie
<div id="div1">
<img id="img1" class="imgRotate" src="/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 = ElementById(id);
// we store the angle inside the image tag for persistence
if (!whence) {
p.angle = ((p.angle==undefined?0:p.angle) + angle) % 360;
} el {
p.angle = angle;
}
河北教育考试院录取结果查询if (p.angle >= 0) {
var rotation = Math.PI * p.angle / 180;
} el {
var rotation = Math.PI * (360+p.angle) / 180;
}
var costheta = s(rotation);
var sintheta = Math.sin(rotation);
if (document.all && !window.opera) {
var canvas = ateElement('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')";
} el {
var canvas = ateElement('canvas');
if (!p.oImage) {
canvas.oImage = new Image();
sky highcanvas.oImage.src = p.src;
} el {
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 =
context.save();
if (rotation <= Math.PI/2) {
} el if (rotation <= Math.PI) {
} el if (rotation <= 1.5*Math.PI) {
} el {
}
context.drawImage(canvas.oImage, 0, 0, canvas.oImage.width, canvas.oImage.height);
}
canvas.id = p.id;
canvas.angle = p.angle;
placeChild(canvas, p);
怀疑}
function rotateRight(id,angle) {
rotate(id,angle==undefined?90:angle);
}
function rotateLeft(id,angle) {
rotate(id,angle==undefined?-90:-angle);
}appointed
$("#input1").click(function(){
手机铃声免费下载mp3
$("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>
测试结果:chrome下效果正常,但旋转后img对象变为canvas对象;ie8下效果正常,旋转后img对象仍为img对象。Matrix()参数较多,使⽤时需较多计算。
3 使⽤Microsoft提供的BasicImage对象
⽰例代码:
复制代码代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "www.w3/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="www.w3/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; chart=UTF-8" />
</head>
<body>
<img id="image" src="/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;
</script>
</html>
测试结果:chrome下不能旋转;ie8下效果正常,旋转后img对象仍为img对象。BasicImage()仅⼀个参数。
查看这三种⽅法的代码会发现,本质上是⼀种解决⽅案:chrome下使⽤canvas对象实现,ie8下使⽤VML或者Matrix()或BasicImage()实现。本⼈近期改造⼀个组件:其中涉及到旋转、放⼤图⽚,由于jQueryRotate.js在ie8下会⽣成⼀个新的对象,导致放⼤图⽚前选择图⽚时,需要进⾏特殊处理。后决定对chrome、ie8分开处理,chrome下使⽤jQueryRotate实现,ie8下使⽤BasicImage()实现,保证了代码的简洁性和可读性。
点心培训