#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:
Вам нужен 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.