2012-02-24 1 views
5

У меня есть эта карусель, которая вращается в 3D с использованием -webkit-transform: rotateX(rotation in deg);. Он имеет 10 панелей, что означает, что каждые 36 градусов есть панель с центром.Как рассчитать угол поворота ближайшей панели в карусели

Теперь я пытаюсь создать эффект «привязки к», вызванный событием touchend, установив ближайшую плоскость, расположенную по центру спереди.

Моя проблема в том, что из произвольного значения вращения, скажем, -1820 град, как я могу вычислить, какая панель, а точнее, в какой степени ближайшая панель?

Надеюсь, что имеет смысл. Подсказка будет высоко оценена.

ответ

4

Если я правильно понимаю ваш вопрос, вы должны использовать оператор модуля, который в основном является делением, которое согласно wg3schools определяется как знак процента%.

Пример: 5% 2 равно 1

В вашем случае вы можете сделать semthing как

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

Итак, теперь вы знаете позицию своего угла resepct к предыдущему углу (назовём это A). Если вы выполняете дополнительную простую операцию (36-20 = 16), вы также знаете расстояние от следующего угла.

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

Надеется, что это помогает

+0

возможно, что-то есть, но мне нужен угол, который не более + -36 от -1820. – jenswirf

+0

Хорошо, я отредактировал свой ответ –

+0

, чтобы лучше понять оператора modulo, если вам нужно, я нашел это: «modulo в основном означает« продолжайте отбирать второй номер от первого номера. Когда вы больше не сможете этого делать, в отрицательные числа, то, что осталось, - это ответ «». Он был размещен здесь http://ask.metafilter.com/43903/Help-me-understand-modulus-operators. –

0

Вот что я закончил с на основе входных данных Danele Б ..

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; 
} 

Я уверен, что есть аккуратнее способ написания, но это, кажется, работа ...