necesitaba una función similar para un proyecto, pero la mía también funciona en dispositivos táctiles como el iPad o tabletas Android:
http://jsfiddle.net/C3tuD/46/
Es necesario jQuery y una biblioteca de rotación que se puede encontrar here, a continuación, activarla a través de Código $("#ObjectToBeRotated").rotateAble();
Fuente:
$.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);
};
¡Gracias por este código! ¿sabes cómo establecer el centro de rotación del círculo? no atan2() – user1775888
y ¿qué significa 'deg' en el código? – user1775888
@ user1775888: 'deg' significa 'grados', también puede usar valores en 'radianes usando' rad '. –