2013-09-22 3 views
1

я не знаю, как я могу изменить скорость, а функция setInterval работает ..setInterval изменение скорости под действием

В коде:

var timeout, count = 0, speed = 5000; 

        $('#stage').mousedown(function() { 
        timeout = setInterval(function() { 
         speed = parseInt(speed/1.3); // HERE I want change speed 
         create(speed); // Some Function 
        }, speed); // This speed, I don't know how to change 
       }); 

       $('#stage').mouseup(function() { 
        count = 0; 
        clearInterval(timeout); 
       }); 

Эта работа, но скорость вне функция Const (5000)

Большое спасибо за помощь!

+0

Вместо этого используйте цикл setTimeout. – Bergi

+0

Возможный дубликат [setInterval (funtion(), время) время изменения во время выполнения] (http://stackoverflow.com/questions/10576106/setintervalfuntion-time-change-time-on-runtime) – Bergi

ответ

1

Вам нужно будет использовать именованную функцию, чтобы передать ее в новую функцию setTimeout.

var speed = 5000; 
var timer; 

$('#stage').mousedown(function() { 
    timer = setTimeout(handleTick, speed); 
}); 

$('#stage').mouseup(function() { 
    clearTimeout(timer);  
}); 

var handleTick = function() { 
    speed = parseInt(speed/1.3); 
    timer = setTimeout(handleTick, speed); 
}; 
+0

Это никогда не остановится! Когда вы вызываете setTimeout в функции handleTick, вам нужно снова установить таймер, иначе clearTimeout не будет работать. – robsonrosa

+0

@robsonrosa Да, хороший улов. Обновлен ответ. –

0

Насколько я знаю, вы не можете изменить задержку после вызова setInterval. Однако вы можете называть setTimeout рекурсивным образом:

var speed = 5000; 

function doSomething() { 
    console.log(speed); // prints from 5000 to 1000 
    speed -= 1000; 
}; 

setTimeout(function() { 
    doSomething(); // changes the global "speed" var internally 
    speed && setTimeout(arguments.callee, speed); 
}, speed); 
+0

'arguments.callee' устарел. Вместо этого лучше использовать именованные функции. –

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