Ok, je me sens comme un grand mannequin pour ne pas me souvenir des mathématiques correctives, mais pour la vie de moi, je ne me souviens pas comment faire de la trigonométrie de base (je suis un développeur backend donc je n'ai littéralement jamais utilisé cela dans ma vie).Objet Dragable et Rotatif dans Javascript (Mootools)
Je travaille sur un objet déplaçable/pivotant dans MooTools qui ressemble un peu au processus de mise à l'échelle et de rotation des images dans Photoshop. Fondamentalement, 5 éléments de contrôle. Le centre entraîne l'objet et les commandes de coin font pivoter l'objet. La meilleure façon de le montrer:
var Box = new Class({
element: null,
boxes: {},
rotators: {},
draggers: {},
size: 10,
controls: {
'center': {
x: [45, 45],
y: [45, 45]
},
'topleft': {
x: [0, 0],
y: [0, 0]
},
'topright': {
x: [90, 90],
y: [0, 0]
},
'bottomleft': {
x: [0, 0],
y: [90, 90]
},
'bottomright': {
x: [90, 90],
y: [90, 90]
}
},
initialize: function (el) {
// the element to use
this.element = el;
// Create dragger boxes
Object.each(this.controls, function (value, key, i) {
// Boxes
this.boxes[key] = new Element('div', {
'id': key,
'class': 'box',
}).setStyles({
'left': value.x[0] + 'px',
'top': value.y[0] + 'px',
'height': this.size + 'px',
'width': this.size + 'px'
}).inject(this.element);
// Draggers
this.draggers[key] = new Drag(key, {
limit: {
x: value.x,
y: value.y
},
onDrag: function (el, e) {
// Get this
el.addClass('dragging');
// The center moves it
if (el.id == 'center') {
// Move it around
el.getParent().setStyles({
left: (e.client.x - 45),
top: (e.client.y - 45)
});
// Else, rotating
} else {
// Get the current rotation of the object
var rotation = el.getParent().getStyle('transform');
// If it hasn't been set (for whatever reason)
if (rotation == null) rotation = "0";
// The coordinates of the box clicked
var center = $('center').getCoordinates();
var coords = el.getCoordinates();
// Rotate
var rotate = (rotation.replace(/[A-Za-z\(\)$-]/g, "")).toInt() + 2;
// Log the rotation
console.log(rotate);
// Set the styling for the parent
el.getParent().setStyles({
'transform': 'rotate(' + rotate + 'deg)',
'-o-transform': 'rotate(' + rotate + 'deg)',
'-ms-transform': 'rotate(' + rotate + 'deg)',
'-webkit-transform': 'rotate(' + rotate + 'deg)'
});
// if
}
},
onComplete: function (el) {
el.removeClass('dragging');
}
// draggers
});
// bind it all together
}.bind(this));
// initialize
}
// box
});
new Box($('box'));
J'ai la partie draggable et la pièce de rotation là-bas, mais je ne peux pas comprendre comment calculer l'angle de rotation. Quelqu'un peut-il aider un grand mannequin avec ce problème?
est ici le terrain de jeu: http://jsfiddle.net/jessejamesrichard/j4uV2/3/
Un million grâce à l'avance.
Vous avez raison. Ce n'est pas une question spécifique au cadre. Bien que je me sois approché du week-end, je n'étais pas aussi proche que je le suis maintenant (merci à vous). Votre défi est à la fois bien accueilli et grandement exaspérant :) –
Ok. Je suis dedans. http://jsfiddle.net/jessejamesrichard/j4uV2/6/ Je vais maintenant mettre à jour ce prochain donc c'est une meilleure classe. Des suggestions quant à pourquoi il compense d'environ 45 degrés mon vriend néerlandais? –
Vous avez oublié cette partie: * "Je recommande d'enseigner la rotation de la rotation de la base par rapport au centre, soit 45, 135, 225 et 315 degrés." * Vous devez ajouter ceci comme une propriété à chaque coin draggable, et l'utilise comme rotation de base. Ça va corriger au bon angle. –