jQuery拖动并旋转到角度

| 我正在使用jQuery UI拖放图像。我还想将图像旋转360度,以便像在Photoshop中一样移动和旋转图像。我正在使用jQuery旋转插件在单击时旋转图像,但是我想选择一个角并拖动以将图像旋转到任何角度。 实时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 });
    });
});
    
已邀请:
请检查这个,小提琴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
radians
可以用
rad
2)您可以通过改变ѭ6来改变旋转点 例如:
transform-origin: 50% 50%
将旋转点移到中心。     
这对我有用。 http://plnkr.co/edit/xaCWl9Havv1ow7bhMTf2?p=preview
(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)\');
      }
    })
}());
    
如果有人遇到与我相同的问题,我将在此保留: 这里的答案很好,但是如果您希望它在移动设备和IE <10上运行,则需要一个库。我花了大约一个星期的时间找到了它,并完成了工作。 图书馆链接     
我的项目需要类似的功能,但我的产品也可以在iPad或Android Tablets等触摸设备上工作: http://jsfiddle.net/C3tuD/46/ 您需要jQuery和旋转库,您可以在此处找到它,然后通过ѭ9激活它 源代码:
$.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);
};
    
在JavaScript中这不可能旋转任何角度。在IE中这是可能的,因为MS为此已在IE中实现了activeX控件,但没有跨浏览器解决方案。 无论如何,如果您仍然想投入时间,可以使用SVG,它可以执行任何此类任务,但仍然存在跨浏览器问题。 IE6 / 7/8没有实现任何SVG,即使您可以使用ChromeFrame谷歌项目来解决该问题,或者您可以找到IE的任何SVG插件。     

要回复问题请先登录注册