我Blockly
在customBlocks.js
文件中完成了以下块:
Blockly.Blocks['move_right'] = {
init: function() {
this.appendValueInput("PIXELS")
.setCheck("Number")
.appendField("move to right");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(290);
this.setTooltip('');
this.setHelpUrl('http://www.example.com/');
}
};
Blockly.JavaScript['move_right'] = function(block) {
var value_pixels = Blockly.JavaScript.valueToCode(block, 'PIXELS', Blockly.JavaScript.ORDER_ATOMIC);
// TODO: Assemble JavaScript into code variable.
var codeMoveRight = "$(\"#moveDiv\").animate({\n " +
"left: \"+=" + value_pixels + "px\"\n" +
"},1000);\n";
return codeMoveRight;
};
div
根据您在其上设置的像素数量,将 a向右移动。您必须在math_number
块内放置一个块move_right
以放置要移动的像素数量。
我的html
文件中有一个workspace
注入的变量Blockly workspace
:
var workspace = Blockly.inject('blocklyDiv',
{toolbox: document.getElementById('toolbox')});
我想做的事
它是在块已显示在 Blockly 的工作区上时从 JavaScript 中检索此数量的像素,而不是之前。
我试过的
我直接尝试从我的兄弟(谷歌浏览器)的控制台访问该
workspace
变量,并且可以获得“子块”但不是它们的值。如下:console.log(workspace.topBlocks_[0].childBlocks_);
我还尝试将工作区转换为 dom,然后转换为文本:
var xml = Blockly.Xml.workspaceToDom(workspace); var xml_text = Blockly.Xml.domToText(xml); console.log(xml_text);
在这里我可以看到“子块”的值,我的意思是
math_number
块,它存储在文本中,但我不知道如何获取它。
为什么我要实现这一目标?
因为我想要的是检查用户是否向右移动了 300 像素。如果是这样,那么我将显示一条消息,其中我将输入“你明白了!”。
我的问题
是否有可能制作我放在工作区上的那个 Block 的实例,然后使用该实例访问它的像素值?
编辑:
我也可以获得left
@Oriol所说的价值:
$('#moveDiv').css('left');
但我没有把它放在这里,因为它使用的属性Jquery
(这根本不重要,因为它也是一个不错的选择,但不是预期的那样)。Block
我的意图是在将它放在之后获取一个实例,Blockly workspace
以便以后随时使用它。