Um bom aplicativo da Web redimensiona o Blockly para preencher o espaço disponível na tela em vez de ter um tamanho fixo. Há várias maneiras de fazer isso, incluindo o uso de um posicionamento de iframe, CSS e JavaScript. Esta página demonstra uma abordagem de sobreposição que é robusta e flexível.
Esse é um processo de três etapas. O primeiro passo é definir a área. A segunda etapa é injetar o Blockly. A terceira etapa é posicionar o Blockly sobre essa área.
1. Definir a área
Usando uma tabela HTML ou um div
com CSS, crie uma área vazia que
flui à medida que a página é redimensionada.
Verifique se a área tem um ID (nesta página, vamos chamá-la de blocklyArea
).
Veja uma demonstração ao vivo (em inglês) de uma célula de tabela que preenche a parte inferior da tela.
2. Injetar o espaço de trabalho
A injeção do Blockly é o mesmo que o processo descrito em
Como injetar o Blockly de tamanho fixo.
Adicione o código, o elemento blocklyDiv
, uma caixa de ferramentas e uma chamada de injeção.
Agora, o Blockly deve estar em execução na página, mas não localizado onde deveria estar (provavelmente fora da tela).
3. Posicionar o espaço de trabalho
A etapa final é posicionar o elemento blocklyDiv
sobre o elemento
blocklyArea
. Para fazer isso, remova todos os estilos height
e width
de blocklyDiv
e adicione posicionamento absoluto:
<div id="blocklyDiv" style="position: absolute"></div>
Em seguida, substitua o script de injeção por um que também posicione "blocklyDiv" em "blocklyArea":
const blocklyArea = document.getElementById('blocklyArea');
const blocklyDiv = document.getElementById('blocklyDiv');
const workspace = Blockly.inject(blocklyDiv,
{toolbox: document.getElementById('toolbox')});
const onresize = function(e) {
// Compute the absolute coordinates and dimensions of blocklyArea.
const element = blocklyArea;
let x = 0;
let y = 0;
do {
x += element.offsetLeft;
y += element.offsetTop;
element = element.offsetParent;
} while (element);
// Position blocklyDiv over blocklyArea.
blocklyDiv.style.left = x + 'px';
blocklyDiv.style.top = y + 'px';
blocklyDiv.style.width = blocklyArea.offsetWidth + 'px';
blocklyDiv.style.height = blocklyArea.offsetHeight + 'px';
Blockly.svgResize(workspace);
};
window.addEventListener('resize', onresize, false);
onresize();
Confira uma demonstração ao vivo do Blockly que preenche a parte de baixo da tela.