Segue uma função para gerar uma barra de fração automaticamente, com posição e dimensões inseridos na chamada da função.
<canvas width="600" height="600"></canvas>
<script>
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');
pincel.fillStyle = 'lightgrey';
pincel.fillRect(0, 0, 600, 400);
pincel.strokeStyle = 'black';
pincel.strokeRect(0, 0, 600, 400);
function desenhaQuadrado(x, y, tamanho, cor) {
pincel.strokeStyle = 'black';
pincel.fillStyle = cor;
pincel.fillRect(x, y, tamanho, tamanho);
pincel.strokeRect(x, y, tamanho, tamanho);
}
function desenhaFracao(x, y, tamanhoQuadrado, numerador, denominador, corNumerador) {
//Numerador indica quantas partes do inteiro foram utilizadas (quadrados pintados).
//Denominador indica a quantidade máxima de partes em que fora dividido o inteiro.
//Os quadrados não preenchidos são a diferença entre o denominador e o numerador.
var quadradosRestantes = denominador - numerador;
var posicaoInicialRestantes = x +(numerador * tamanhoQuadrado);
for(var i = 1; i <= numerador; i++) {
desenhaQuadrado(x, y, tamanhoQuadrado, corNumerador);
x += tamanhoQuadrado;
}
for(var i = 1; i <= quadradosRestantes; i++) {
desenhaQuadrado(posicaoInicialRestantes, y, tamanhoQuadrado, 'white');
posicaoInicialRestantes += tamanhoQuadrado;
}
}
desenhaFracao(150, 200, 30, 1, 4, 'green');
</script>