2012-02-24 10 views
5

Mam tę karuzelę, która obraca się w 3D przy użyciu -webkit-transform: rotateX(rotation in deg);. Ma 10 szyb, co oznacza, że ​​co 36 stopni znajduje się wycentrowany panel.Jak obliczyć kąt obrotu najbliższej szyby w karuzeli

Teraz próbuję utworzyć efekt "przyciągania do" wywołany zdarzeniem touchend, ustawiając najbliższy panel wycentrowany płasko z przodu.

Mój problem polega na tym, że z dowolnej wartości obrotu, powiedzmy -1820 stopni, w jaki sposób mogę obliczyć, który panel, a raczej w jakim stopniu znajduje się w najbliższym okienku?

Mam nadzieję, że ma to sens. Wskazówka byłaby bardzo doceniana.

Odpowiedz

4

Jeśli dobrze zumowię twoje pytanie, powinieneś użyć operatora modulus, który jest w zasadzie resztą podziału, która zgodnie z wg3schools jest zdefiniowana jako procentowy znak%.

Przykład: 5% 2 jest równa 1

w twoim przypadku można zrobić semthing jak

var initialAngle= getAngle(); //let's say it's 1820 
var closestPane= initialAngle%36; //which gives you 20. 

Więc teraz wiesz pozycję swojej resepct kątem do poprzedniego kąta (nazwijmy to A). Jeśli wykonasz dodatkową prostą czynność (36-20 = 16), poznasz odległość od tego kąta.

angle before ---- A ---- angle after 
      20deg 16deg 

Nadzieja to pomaga

+0

Może masz coś do tego, ale potrzebuję kąta co najwyżej -36 od -1820. – jenswirf

+0

Ok, edytuję swoją odpowiedź na –

+0

, aby lepiej zrozumieć operatora modulo, na wypadek, gdybyś potrzebował, znalazłem to: 'modulo zasadniczo oznacza' trzymaj się drugiej cyfry od pierwszego numeru. | Kiedy nie możesz tego zrobić więcej bez wchodzenia na liczby ujemne, cokolwiek pozostało, jest odpowiedzią "". Został opublikowany tutaj http://ask.metafilter.com/43903/Help-me-understand-modulus-operators. –

0

Oto, co skończyło się w oparciu o dane Danele B. ..

function snapToAngle(Angle) { 
var deltaAngle = Math.abs(Angle)%36; 

    if (Angle >= 0) { 
     (deltaAngle <= 18) ? Angle -= deltaAngle : Angle+=36-deltaAngle; 
    } else { 
     (deltaAngle <= 18) ? Angle += deltaAngle : Angle -= 36-deltaAngle; 
    } 
return Angle; 
} 

Jestem pewien, że to neater sposób pisania, ale wydaje się, praca ..

Powiązane problemy