jquery拖动并旋转到角度

时间:2011-04-13 10:26:33

标签: jquery jquery-ui drag-and-drop draggable

我正在使用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 });
    });
});

5 个答案:

答案 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)

这对我有用。 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)');
      }
    })
}());

答案 2 :(得分:2)

如果其他人遇到与我相同的问题,我会把它留在这里:

这里的答案很好但是如果你想让它在移动设备和IE< 10上工作,你需要一个库。我花了大约一个星期才找到它并完成工作。

library link

答案 3 :(得分:0)

我需要一个项目的类似功能,但我的也适用于iPad或Android平板电脑等触控设备:

http://jsfiddle.net/C3tuD/46/

你需要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插件。

相关问题