Jquery.rotate实现图片自由旋转,左右90度,输入角度都可以
这个方法我相信在开发中是一个比较常用的方法,
用户上传的图片可能正的,但也可能是反的,还有可能是横的,我们想有好的体验就需要来旋转的看,如果是下载下来,那图片播放器会自带这样的功能,但是网页不会哦。
所以咱们一起来实现一下。
先看效果
1.jpg (29.51 KB, 下载次数: 208)
2014-8-22 08:44 上传
QQ截图20140822084536.jpg (30.11 KB, 下载次数: 136)
2014-8-22 08:44 上传
QQ截图20140822084528.jpg (30.24 KB, 下载次数: 137)
2014-8-22 08:44 上传
QQ截图20140822084603.jpg (30.1 KB, 下载次数: 143)
2014-8-22 08:44 上传
方法很简单,大家直接看Html代码
[HTML] 纯文本查看 复制代码
美图WEB开放平台function Left() {
$("#imgtest").rotateLeft()
}
function Right() {
$("#imgtest").rotateRight()
}
function Rotate() {
$("#imgtest").rotate($("#txtnumber").val());
}
html, body { height: 100%; overflow: hidden; }
body { margin: 0; }
输入要旋转的角度:
Rotate
left
right
Jquery我就不提供了这个大家自己下载吧。
我提供一下rotate.js
如下
[JavaScript] 纯文本查看 复制代码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);
}