2016-08-07 4 views
1

Попытка обернуть мою голову вокруг метода setInterval() в JS, поскольку я изучаю JS на данный момент. В качестве упражнения я пытаюсь создать много цветов (которые сейчас только прямоугольники). Я думал, что я мог бы использовать setInterval(), чтобы непрерывно генерировать прямоугольники в различных позициях, например:Невозможно правильно настроить JS setInterval

var c = document.getElementById("primeCanvas"); 
var ctx = c.getContext("2d"); 
var xOffset = 10; 

function generateFlower(x, y) { 
    "use strict"; 
    ctx.fillStyle = "#FF0000"; 
    ctx.fillRect(x + xOffset, y, 150, 100); 
} 

function addOffset(xPos) 
{ 
    "use strict"; 
    xOffset+=xPos; 
} 

setInterval(addOffset(50), 900); 

setInterval(generateFlower(10+xOffset,10), 1000); 

Однако, когда я бегу сценарий только один прямоугольник появляется в том же месте (или, возможно, больше прямоугольников появляются, но на сверху друг друга). Цель заключалась в том, чтобы один прямоугольник генерировался в секунду, добавляя 50 к расположению x прямоугольника (в холсте HTML).

Может кто-нибудь понять, почему это не работает?

+0

setInterval ("generateFlower()", 1000,10 + xOffset, 10); –

+0

Вы должны передать функцию, а не выполнять ее в параметре. – Brunis

ответ

0

инструкция setInterval(addOffset(50), 900); сначала выполняет addOffset(50), затем планирует результат для выполнения через 900 мс после этого.

Я думаю, что вы хотите, чтобы запланировать запуск задания на addOffset(50) от 900ms после, так что вам нужно сделать так:

let intervalId=setInterval(function(){addOffset(50);}, 900); 

intervalId важно вам отменить задание по расписанию.

+0

Спасибо - я точно не делал этого, но ты помог мне на правильном пути. Если кто-то сталкивается с подобной проблемой, я просто написал ее вот так, и это сработало: function generateFlower (x, y) { \t «use strict»; \t setInterval (function() {ctx.fillStyle = "# FF0000"; ctx.fillRect (x + xOffset, y, 150, 100); xOffset + = 10}, \t 3000); } Нет необходимости в каких-либо вспомогательных функциях или что-то еще - единственной переменной, необходимой для этого, является xOffset, и таким образом она получает +10 каждые 3 секунды. – yolandayolanda

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