我正在使用jQuery UI来拖放图像。我还想将图像旋转360度,这样我就可以像在Photoshop中一样移动和旋转它。我使用jQuery rotate plugin在点击时旋转图像,但我想选择一个角并拖动以将图像旋转到任意角度。
Live JS:http://jsfiddle.net/87jaR/
JavaScript代码:
var test = 5;
$(function()
{
$('#rotate').draggable({ containment: 'frame' });
$('#frame img').live('mousedown', function(event)
{
test = test + 15;
$(this).rotate({ angle: test });
});
});
答案 0 :(得分:13)
请检查这个,小提琴http://jsfiddle.net/prasanthkc/frz8J/
var dragging = false
$(function() {
var target = $('#target')
target.mousedown(function() {
dragging = true
})
$(document).mouseup(function() {
dragging = false
})
$(document).mousemove(function(e) {
if (dragging) {
var mouse_x = e.pageX;
var mouse_y = e.pageY;
var radians = Math.atan2(mouse_x - 10, mouse_y - 10);
var degree = (radians * (180 / Math.PI) * -1) + 90;
target.css('-moz-transform', 'rotate(' + degree + 'deg)');
target.css('-moz-transform-origin', '0% 40%');
target.css('-webkit-transform', 'rotate(' + degree + 'deg)');
target.css('-webkit-transform-origin', '0% 40%');
target.css('-o-transform', 'rotate(' + degree + 'deg)');
target.css('-o-transform-origin', '0% 40%');
target.css('-ms-transform', 'rotate(' + degree + 'deg)');
target.css('-ms-transform-origin', '0% 40%');
}
})
})
1)此处 deg
表示 degree
,您可以使用 rad
for radians
2)您可以通过更改 transform-origin
对于例如:transform-origin: 50% 50%
会将旋转点移动到中心位置。
答案 1 :(得分:5)
(function() {
var RAD2DEG = 180 / Math.PI;
var dial = $("#box");
dial.centerX = dial.offset().left + dial.width()/2;
dial.centerY = dial.offset().top + dial.height()/2;
var offset, dragging=false;
dial.mousedown(function(e) {
dragging = true;
offset = Math.atan2(dial.centerY - e.pageY, e.pageX - dial.centerX);
})
$(document).mouseup(function() {
dragging = false
})
$(document).mousemove(function(e) {
if (dragging) {
var newOffset = Math.atan2(dial.centerY - e.pageY, e.pageX - dial.centerX);
var r = (offset - newOffset) * RAD2DEG;
dial.css('-webkit-transform', 'rotate(' + r + 'deg)');
}
})
}());
答案 2 :(得分:2)
答案 3 :(得分:0)
我需要一个项目的类似功能,但我的也适用于iPad或Android平板电脑等触控设备:
你需要jQuery和一个用于轮换的库,你可以找到here,然后通过$("#ObjectToBeRotated").rotateAble();
激活它
源代码:
$.fn.rotateAble = function() {
var offset = null;
var dragging = false;
var RotationTarget = $(this); // Save target, cause $(this) doesn't work from MouseUp and MouseMove
// Mouse
var MouseDown = function(e) {
dragging = true;
offset = {
x: e.pageX,
y: e.pageY
};
$("div#rotation").text("MouseDown");
};
var MouseUp = function() {
dragging = false;
$("div#rotation").text("MouseUp");
};
var MouseMove = function(e) {
var mouse_x = e.pageX - offset.x;
var mouse_y = e.pageY - offset.y;
//$("div#rotation").text("Move: " + mouse_x + " " + mouse_y);
if (dragging) {
var radians = Math.atan2(mouse_x, mouse_y);
var degree = (radians * (180 / Math.PI) * -1) + 90;
RotationTarget.rotate(degree);
//$("div#rotation").text(degree);
}
};
// Touch
var TouchStart = function(e) {
var orig = e.originalEvent;
var pos = $(this).position();
offset = {
x: orig.changedTouches[0].pageX,
y: orig.changedTouches[0].pageY
};
};
var TouchMove = function(e) {
e.preventDefault();
var orig = e.originalEvent;
var mouse_x = orig.changedTouches[0].pageX - offset.x;
var mouse_y = orig.changedTouches[0].pageY - offset.y;
var radians = Math.atan2(mouse_x, mouse_y);
var degree = (radians * (180 / Math.PI) * -1) + 90;
$(this).rotate(degree);
//$("div#rotation").text(degree);
};
this.bind("touchstart", TouchStart);
this.bind("touchmove", TouchMove);
$(this).bind("mousedown", MouseDown);
$(document).bind("mouseup", MouseUp);
$(document).bind("mousemove", MouseMove);
};
答案 4 :(得分:-13)
在JavaScript中无法以任何角度旋转。这在IE中是可能的,因为MS为此目的在IE中实现了activeX控件,但不是跨浏览器解决方案。
无论如何如果您仍然有兴趣投入时间,您可以使用能够执行任何此类任务的SVG,但仍然存在跨浏览器问题。 IE6 / 7/8没有任何SVG实现,即使你可以使用ChromeFrame谷歌项目来解决这个问题,或者你可以找到IE的任何SVG插件。