Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2011, 18:09
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Как вовремя остановить анимацию
Здравствуйте, уважаемые.

Перейду сразу к делу

setTimeout(function(){
     doSomething();

     /**Условие остановки*/ setTimeout(arguments.callee, 1000);

}, 1000)


Нужно создать бесконечную анимацию, останавливающуюся и запускающуюся по нажатию кнопки. Если делать плавную анимацию, то вполне сойдет обращение какого нибудь флага при клике по кнопке и проверка его в месте условия остановки, но у меня анимация "рывками", и когда я нажимаю подобную кнопку, проходит еще один кадр анимации, так как setTimeout уже ждет времени своего срабатывания, что недопустимо в моем случае.
setInterval/clearInterval подошел бы идеально, если бы не варьирующаяся длина кадра (в примере 1000, но на деле что-то вроде getInterval()). Подскажите пожалуйста, какие есть способы мгновенно остановить анимацию такого типа? Или, возможно ли как-то подобное осуществить через setInterval?
__________________
readOnly
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2011, 18:44
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

<script type="text/javascript">
window.onload = function(){
    var i = 0;
    
    document.getElementById('a').onclick = function(){
        if(i>0) {
            i = 0;
            window.clearTimeout(timer);
            return false;
        }
        (function(){
            document.getElementById('span').style.left = ++i<200 ? i+'px' : i = 0;
            timer = window.setTimeout(arguments.callee, 10);
            
        })();
        return false;
    };
}
</script>
    
<style type="text/css">
a {display: block; position: relative;}
    
div {
    border: 1px dotted #DDD;
    position: absolute;
    overflow: hidden;
    top: 50px;
    width: 500px;
    height: 50px;
}  
    
span {
    background: blue;
    position: absolute;
    color: white;
    text-align: center;
    width: 50px;
    height: 50px;
}
</style>

<div>
    <span id="span">Text</span>  
</div>

<a href="#" id="a">click</a>

Последний раз редактировалось monolithed, 11.02.2011 в 18:54.
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2011, 19:06
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

monolithed,
Спасибо большое! Суть ясна
__________________
readOnly
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать таймер, как на Letitbit? free_style Javascript под браузер 1 01.07.2010 17:55
While как условные выражения Latro Общие вопросы Javascript 23 27.06.2010 14:53
Как сделать такое fancy menu uonax Элементы интерфейса 2 22.05.2010 12:52
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
как можно создать iframe со скриптами GOll Общие вопросы Javascript 2 05.05.2009 11:32