2013-12-03 3 views
-1

Как я могу сделать clearTimeout, если у меня есть несколько настроек? Здесь у меня есть код:Cleartimeout multiple settimeout

var $elie = $(".gear"), degree = 0, timer; 


function rotate() { 

    $elie.css({ WebkitTransform: 'rotate(' + degree + 'deg)'}); 
    $elie.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});      
    $elie.css({ 'transform': 'rotate(' + degree + 'deg)'});      
    timer = setTimeout(function() { 
     ++degree; rotate(); 
     $('.gear').attr('timeout',timer); 
    },25); 
} 

$(".google").hover(function() { 

    clearTimeout($('.gear').attr('timeout')); 


}); 
$(".gear").hover(function() { 
    rotate(); 
}); 

То есть: http://jsfiddle.net/T9YxL/1/ Проблема: Я парить на шестерней один раз, чем парить на Google логотип - все останавливается, как это имеет. Но когда я нахожусь на ролике дважды, мне приходится дважды наводиться на логотип Google и так далее. Как очистить все эти настройки сразу, например, я пару раз висел на передаче?

Я смотрел здесь: clearTimeout on multiple setTimeout , но это не помогло.

+0

вы будете перезаписывать предыдущую переменную clearTimeout, если вы назначили несколько stTimeout, лучше всего было бы сделать массив и перебрать цикл с clearInterval .. –

+0

Я не уверен, что вы можете/должны хранить таймауты в атрибутах, это не сделано для этого. – Virus721

+0

@ Virus721: Вы можете, ручки таймера - это просто цифры. Атрибуты могут хранить числа (в виде строк, но затем, когда вы их извлекаете и передаете в clearTimeout, они возвращаются к номерам). –

ответ

0
timer = setTimeout(function() { 
    ++degree; rotate(); 
    $('.gear').attr('timeout',timer); 
},25); 

должен быть

timer = setTimeout(function() { 
    ++degree; rotate(); 
},25); 
$('.gear').attr('timeout',timer); 

и:

$(".gear").hover(function() { 
    rotate(); 
}); 

должен быть

$(".gear").hover(function() { 
    clearTimeout($('.gear').attr('timeout')); 
    rotate(); 
}); 

fiddle

+0

Идея заключалась в том, что вы делаете зависание, которое вращается быстрее; но при наведении он должен остановиться. Или это невозможно с таким кодом? Я имею в виду, что код должен быть более полным, я прав? – zmogusnamas

+1

Вы имеете в виду, что вы симулируете укладывание '+ = 1' на ваш угол« градус », используя функции тайминга? awesome :) Более простой способ - использовать 'degree + = incr', хотя ... – LeGEC

+1

http://jsfiddle.net/T9YxL/6/ – LeGEC

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