2014-02-06 7 views
1

Я начинаю играть с изображениями SVG, я сделал два зубчатых колеса, которые должны включаться .mouseenter() и останавливаться на .mouseleave(). Поворот производится функцией setInterval. У меня странная проблема, потому что на Linux Chromium все работает хорошо. В Linux Firefox и Windows Chrome и Firefox колесики не останавливаются на mouseLeave и ускоряются на mouseEnter. Я пытался использовать методы .hover() и .mouseenter()/mouseLeave().jQuery mouseleave и clearInterval не работает

Мой код:

$(document).ready(function(){ 
    var deg = 0; 
    var rotate_right = $('#cog1 use'); 
    var rotate_left = $('#cog2 use'); 
    var interval; 
     $("#cogs").hover(
      function(){ 
       interval = setInterval(function(){ 
       if(deg >= 360) deg = 0; 
        deg += 1; 
        rotate_right.attr('transform', 'rotate('+deg+',32,32)'); 
        rotate_left.attr('transform', 'rotate('+-deg+',32,32)'); 
      }, 10); 
      }, 
      function(){ 
       clearInterval(interval); 
      } 
     ); 
}); 

Мой JSfiddle

+0

Это зависит от того, как мышь над ним. Кажется, в вашем контейнере есть дыра, поэтому, если вы переместитесь слева направо по центру, он установит новый интервал, прежде чем получит шанс очистить старый. Я добавил четкий интервал для входящей части мыши (с проверкой на нуль и установкой на нуль после очистки) и посмотреть, что происходит: http://jsfiddle.net/UM88Y/2/ – gpgekko

ответ

1

проблема в функции парения.

Наведение происходит, даже если вы перемещаете мышь на div # cogs.

Это добавит новое времяInterval, но clearInterval не вызывается, чтобы очистить старый.

Просто добавьте if(interval) clearInterval(interval); в первую строку функции наведения.