jquery 图片360度旋转

  作者:chrispy

HTML:<span id="rotLeft">向左转</span><span id="rotRight">向右转</span><div id="imgBox" class="image_box"><img id="rotImg" src="http://image.zhangxinxu.com/ima

HTML:

<span id="rotLeft">向左转</span>

<span id="rotRight">向右转</span>

<div id="imgBox" class="image_box">

<img id="rotImg" src="http://image.zhangxinxu.com/image/study/s/s512/mm1.jpg" />

</div>

JS:

<script type="text/javascript">

$(function(){

var param = {

right: $("#rotRight"),

left: $("#rotLeft"),

box: $("#imgBox"),

rot: 0

};

var fun = {

right: function(){

param.rot += 90;

$("#rotImg").rotate(param.rot);

if(param.rot === 270){

param.rot = -90;

}

return false;

},

left: function(){

param.rot -= 90;

if(param.rot === -90){

param.rot = 270;

}

$("#rotImg").rotate(param.rot);

return false;

}

};

param.right.click(function(){

if(!$("img#rotImg").length){

param.box.html('<img id="rotImg" src="http://image.zhangxinxu.com/image/study/s/s512/mm1.jpg" />');

}

fun.right();

return false;

});

param.left.click(function(){

if(!$("img#rotImg").length){

param.box.html('<img id="rotImg" src="http://image.zhangxinxu.com/image/study/s/s512/mm1.jpg" />');

}

fun.left();

return false;

});  

});

</script>

插件:

jQuery.fn.rotate = function(angle,whence) {

var p = this.get(0);

// 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.round(Math.cos(rotation) * 1000) / 1000;

var sintheta = Math.round(Math.sin(rotation) * 1000) / 1000;

//alert(costheta+","+sintheta);

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);

}

jQuery.fn.rotateRight = function(angle) {

this.rotate(angle==undefined?90:angle);

}

jQuery.fn.rotateLeft = function(angle) {

this.rotate(angle==undefined?-90:-angle);

}


有用  |  无用

猜你喜欢