ファイルで次のブロックを実行し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
ブラウザ(Google Chrome)のコンソールから変数に直接アクセスしようとしましたが、「子ブロック」を取得できましたが、それらの値は取得できませんでした。次のように: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 ピクセル移動したかどうかを確認することです。もしそうなら、「わかりました!」というメッセージを表示します。
私の質問
ワークスペースに配置したブロックのインスタンスを作成し、そのインスタンスでピクセル値にアクセスする可能性はありますか?
編集:
left
@Oriolが言ったように、次のように値を取得することもできました。
$('#moveDiv').css('left');
のプロパティを使用しているため、ここには入れJquery
ませんでした(これも良いオプションですが、意図したとおりではないため、まったく問題ありません)。私の意図は、後でいつでも操作できるようにBlock
配置した後のインスタンスを取得することです。Blockly workspace