var result=0;
document.getElementById('first').onclick = function (){
for(i=0;i<8;i++){
setTimeout(function (){
scrollTo(0, result+=100)}, 1000)}};
Я хочу, по нажатию, чтобы документ скролился вниз по 100px в секунду. А на деле, после нажатия кнопки, через секунду, у меня документ скролится на 800. Почему так?
Я ведь написал следующее: по нажатию кнопки, запусти функцию, с циклом(i<8;i++) на каждой итерации цикла с задержкой в 1 секунду сделай скролл вниз на 100.
Или я не это написал?
Тимур Турсунбаев, Я почему-то решил, что цикл сначала выполнит то, что я написал в таймауте(вместе с задержкой), а потом перейдет к следующей итерации..
Потому что вы устанавливаете 8 таймаутов с одним и тем же интервалом 1 секунда. Все они естественно выполняются через 1 секунду по порядку. Просто перемножайте таймаут на текущую итерацию:
var result = 0;
document.getElementById('first').onclick = function() {
for(i = 1; i < 8; i++){
setTimeout(function() {
scrollTo(0, result += 100)
}, (i * 1000))
}
};