jquery перетаскивание и поворот под углом

#jquery #jquery-ui #drag-and-drop #draggable

#jquery #jquery-пользовательский интерфейс #перетаскивание #перетаскиваемый

Вопрос:

Я использую пользовательский интерфейс jQuery для перетаскивания изображения. Я также хочу повернуть изображение на 360 градусов, чтобы я мог перемещать и вращать его, как в Photoshop. Я использую плагин jQuery rotate для поворота изображения по щелчку мыши, но я хочу выбрать угол и перетащить, чтобы повернуть изображение под любым углом.

Живой 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 });
    });
});
  

Ответ №1:

Пожалуйста, проверьте с этим, Fiddle 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 для radians

2) Вы можете изменить точку поворота, изменив transform-origin

Например: transform-origin: 50% 50% переместит точку вращения в центр.

Комментарии:

1. Спасибо за этот код! вы знаете, как задать поворот центра окружности? не atan2()

2. @user1775888: «град» означает «градусы», вы также можете использовать значения в «радианах», используя «rad».

3. @user1775888: вы хотите повернуть круг от его центра? если это так, установка значения transform-origin равным 50% 50% выполнит задание

4. @PrasanthKC можем ли мы с их помощью реализовать ту же функциональность для мобильных устройств??.. Спасибо:)..

5. Следует отметить, что первым аргументом для Math.atan2 на самом деле должна быть y-координата, а вторым x-координата ( src ). Кроме того, -10 представляет собой поле основного текста.

Ответ №2:

у меня это работает. 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)');
      }
    })
}());
  

Ответ №3:

Я оставлю это здесь на случай, если у кого-то еще возникнут те же проблемы, что и у меня:

Ответы здесь хороши, но если вы хотите, чтобы это работало на мобильных устройствах и IE <10, вам нужна библиотека. Мне потребовалось около 1 недели, чтобы найти его, и он выполняет свою работу.

ссылка на библиотеку

Комментарии:

1. Именно то, что я искал. Большое спасибо 🙂

2. Является ли это программное обеспечение бесплатным?

Ответ №4:

Мне нужна была похожая функция для проекта, но моя также работает на сенсорных устройствах, таких как iPad или планшеты Android:

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

Вам нужен jQuery и библиотека для поворота, которую вы можете найти здесь, затем активируйте ее через $("#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);
};
  

Комментарии:

1. JqueryRotate.js приводит к 404

Ответ №5:

В JavaScript поворот под любым углом невозможен. Это возможно в IE, поскольку MS реализовала элемент управления ActiveX в IE для этой цели, но не кроссбраузерное решение.

В любом случае, если вам все еще интересно тратить свое время, вы можете использовать SVG, который способен выполнять любые подобные задачи, но все еще имеет проблемы с кроссбраузерностью. В IE6 / 7 / 8 не реализован какой-либо SVG, хотя вы можете использовать ChromeFrame google project для решения этой проблемы или если вы можете найти какой-либо SVG-плагин для IE.