Fondamentalmente è necessario trovare il vettore tra il punto al centro della vostra scatola, e il punto del cursore del mouse, quindi calcolare l'angolo e convertirlo in gradi. Poi basta applicare l'angolo tramite CSS:
var box=$(".box");
var boxCenter=[box.offset().left+box.width()/2, box.offset().top+box.height()/2];
var angle = Math.atan2(e.pageX - boxCenter[0], - (e.pageY - boxCenter[1]))*(180/Math.PI);
box.css({ "-webkit-transform": 'rotate(' + angle + 'deg)'});
box.css({ '-moz-transform': 'rotate(' + angle + 'deg)'});
COSA
Ok, prendiamo questa parte. Questo è ciò che abbiamo:
Il vettore AB va tra il centro della scatola e la posizione del mouse. Siamo andati a calcolare Θ (theta), che è l'angolo tra l'asse X e AB. Poiché AB crea un triangolo con gli assi X e Y, possiamo usare la funzione Arctan per calcolarlo. Più precisamente, si usa la funzione di comodità di Arctan2 che dà un angolo positivo quando y> 0 e angolo negativo quando y < 0.
atan2 restituisce i gradi in radianti , e CSS lavora con gradi, così abbiamo convertire tra i due utilizzando 180/Math.PI
. (Un radiante è la misura di un angolo che, quando viene disegnato un angolo centrale di un cerchio, intercetta un arco la cui lunghezza è uguale alla lunghezza del raggio del cerchio. - Presa da here)
Un ultimo avvertimento - Dal momento che nel browser l'asse Y è invertito (cioè, più in basso vai nella pagina, maggiore è il valore di Y), abbiamo dovuto capovolgere l'asse Y: lo abbiamo fatto aggiungendo un segno meno sul termine Y:
- (e.pageY - boxCenter[1])
spero che questo aiuti chiare alcune cose ...
Ecco un è olated jsfiddle example
BTW, Il tuo gioco è difficile! :)
Se è così, non ha messo a punto una soluzione prima, potrei provare dopo ho guardato alcune cose. Ma spero che ci sia una soluzione migliore. – 11684