2015-05-16 3 views
1

Я собираю сборщик времени, где вы можете установить время на «настоящие» часы. Im найти положение мыши и градусы + вращающуюся DIV с помощью этого скриптаDeg. во вращении

var g; 
     var h; 
     if (e.target.id == "rotationSliderContainer") { 

      g = e.offsetX; 
      h = e.offsetY; 
     } else { 
      g = e.target.offsetLeft + e.offsetX; 
      h = e.target.offsetTop + e.offsetY; 
     } 
     var atan = Math.atan2(g - radius, h - radius); 
     deg = -atan/(Math.PI/180) + 180; 

     var presne = Math.abs(deg - (Math.round(deg/30) * 30)); 

     if (presne <= 2) deg = Math.round(deg/30) * 30; 

     if(deg == 360) 
       deg = 0; 
     two.style.transform = "rotate(" + deg + "deg)"; 

он работает нормально, но она имеет мало ошибку, когда я хочу, чтобы переместить DIV, между 12 и 1,2,3 его листать между 12 и одно из этих значений.

Настоящая демо-версия http://jsfiddle.net/Trolstover/afo7ky03/1/ Есть ли какой-либо ярлык, как предотвратить это нежелательное поведение или я просто ошибся где-то?

+0

Для меня ошибка происходит, когда мышь находится слишком близко к центру часов. Если моя мышь на внешней стороне часов, она работает лучше (независимо от того, на каком номере я нахожусь) –

ответ

1

Это условие if/else переключается между событиями в rotationSliderContainer и других элементах DOM (таких как rotationSlider и тело). Это другое условие - ваш преступник.

if (e.target.id == "rotationSliderContainer") { 

     g = e.offsetX; 
     h = e.offsetY; 
    } else { 
     g = e.target.offsetLeft + e.offsetX; 
     h = e.target.offsetTop + e.offsetY; 
    } 

удалите эти две линии, и все должно быть хорошо.

if (e.target.id == "rotationSliderContainer") { 

     g = e.offsetX; 
     h = e.offsetY; 
    } 

Прохладный часы^_^

+0

получил это! благодаря :) – Darlyn

Смежные вопросы