Проблема в том, что вы используете это выражение для создания стиля заливки:
fmt.Sprintf("#%06x", rand.Int())
rand.Int()
возвращает неотрицательное псевдослучайное значение int
. Размер int
равен 64 битам, если GOOS=js
и GOARCH=wasm
. Это означает, что случайное число int
будет случайным 8 байтов (первый бит всегда равен 0 из-за неотрицательности).
Если вы отформатируете такое число с помощью глагола %06x
, как почти всегда, это будет больше, чем просто 6 шестнадцатеричных цифр. Ширина 6
означает быть не менее 6, а флаг 0
означает заполнение нулями, если меньше. Но если он длиннее, он не усекается.
И если вы установите недопустимый цвет на canvas.fillStyle
, он будет игнорироваться, и последний установленный допустимый стиль заливки останется активным. И я предполагаю, что это был серый цвет, который вы использовали до цикла.
Исправить несложно, просто убедитесь, что случайное число имеет не более 3 байтов или, другими словами, 6 шестнадцатеричных цифр. Используйте простую битовую маску:
ctx.Set("fillStyle", fmt.Sprintf("#%06x", rand.Int()&0xffffff))
Или используйте rand.Intn()
вместо rand.Int()
:
ctx.Set("fillStyle", fmt.Sprintf("#%06x", rand.Int(0x1000000)))
Также context.fillRect()
ожидает 4 аргумента: x
, y
, width
и height
, поэтому должно быть что-то вроде этого:
ctx.Call("fillRect", 20+(col*width), maxHeight-(row*height), width, height)