美文网首页blockly教程
【blockly入门指引】2, 在网页中使用blockly

【blockly入门指引】2, 在网页中使用blockly

作者: scratch少儿编程 | 来源:发表于2018-09-05 18:00 被阅读141次

    原文:https://developers.google.com/blockly/guides/get-started/web

    blockly可以在web,android,ios端使用。下面介绍的是如何在web端中去使用。简单来理解就是把它看作是一个js库,在html中引入这个js库即可。

    给你源码

    blockly是开源,你可以直接去官网上去下载。如下列出了地址:

    下载zip

    下载TAR

    gitHub

    代码下载完成后,用浏览器打开文件目录:demos/fixed/index.html,验证一下模块是否可以拖动?

    image.png

    如果一切正常,你应该可以看到如上的效果。

    要注意:

    建议使用非ie浏览器打开。

    2.blockly的使用可以是离线了,你就当一个静态的网页,直接使用浏览器打开即可

    代码解释

    我们打开demos/fixed/index.html的源代码如下:

    image.png

    关键的部分分成四部分:

    引入必要的js库。上面一共列了3个。

    blockly_compressed.js// 核心库blocks_compressed.js// 核心库ms/js/en.js// 语言库。不同的js文件对应不同的语言包

    创建一个大小固定的div。这个部分会用来注入blockly实例。要注意的是div的宽高要明确写上,不然就得不到正确的显示效果。当然,你也可以通过代码去设置这个宽高,以达到响应式的效果。

    初始化工具箱。

    display:none.在网页上不显示

    controls_if,logic_compare等等都是预定义好的块,也就是blockly已经提供好的块,可以直接使用。

    调用inject方法,实现blockly注入。

    Blockly.inject详解

    上面的demo文件中,调用了Blockly.inject()方法,它的第一个参数是要注入的div元素,第二个参数是配置项。配置项支持以下选项:

    名称类型描述

    collapse布尔允许块被折叠或展开。如果工具箱有类别默认为true

    comments布尔允许块有评论(comments)。如果工具箱有类别默认为true

    css布尔如果为false,则不要注入CSS(从文档中获取css)。默认为true。

    disable布尔允许块被禁用。如果工具箱有类别默认为true。

    gridobject配置网格。请参阅网格 ...

    horizontalLayout布尔如果是true,工具箱是水平的;如果false,则工具箱是垂直的。默认为false。

    maxBlocksnumber可以创建的最大模块数。对学生的练习很有用。默认为Infinity。

    mediastring从页面(或frame)到Blockly媒体目录的路径。默认为。"https://blockly-demo.appspot.com/static/media/"

    oneBasedIndex布尔如果true,列表和字符串操作的索引从1开始,如果false,则索引从0开始。默认为true。

    readOnly布尔如果true,阻止用户进行编辑。废除工具箱和垃圾桶。默认为false。

    RTL布尔如果true,翻转编辑器(阿拉伯语或希伯来语语言环境)。请参阅RTL演示。默认为false。

    scrollbars布尔设置工作区是否可滚动。如果工具箱有类别默认为true,否则默认为false。

    sounds布尔如果false,不播放声音(例如点击和删除)。默认为true。

    toolboxXML节点用户可用的类别和块的树结构。请参阅下面的详细信息。

    toolboxPositionstring确定工具箱的位置,可取"start"或者"end"。与水平、垂直布局及RTL设置有关。默认为"start"。

    trashcan布尔显示或隐藏垃圾桶。如果工具箱有类别默认为true,否则为false。

    zoomobject配置缩放行为。请参阅

    上面的配置项中最重要的选项是toolbox。它是一个XML树结构,用于指定工具箱中哪些块可用(侧面菜单),它们如何分组以及是否存在类别。有关定义工具箱的更多信息

    除了Blockly自带的默认模块以外,还需要构建自定义模块来调用你自己的Web应用程序的API。在迷宫游戏中你可以看到有设置运动的自定义模块。更多关于创建自定义模块的信息

    生成具体编程语言的代码

    Blockly不是一种编程语言,我们不能直接'运行'Blockly程序,事实上,Blockly可以把用户的程序(就是在工作区中的块)转换为JavaScript,Python,PHP,Dart或其他语言。然后,你再去运行这些编译语言。

    用户在blockly中拖拽组合模块 --blockly---> 各种编程语言(JavaScript,Python,PHP,Dart)

    如下:

    image.png

    更多关于代码生成器的信息

    导入和导出块

    你可能花了一些时间在工作区中组装了这个块但没有做完,你希望保存当前的进度,下次再接着做。这个需要是很常见的,就好比你在文本编辑器中写了一段代码,直接按ctrl+s保存,下次直接打开就可以了。

    image.png

    由于网页中的交互操作效果不会影响网页的源文件,如果你关闭了网页,下次再打开你会发现你的工作归0了,这太不友好了。

    所以,你需要导出块( 保存blockly代码)和导入块(恢复blockly代码)操作

    导出

    如果您的应用程序需要保存并存储用户模块信息,并在后面再次访问时将其恢复,则需要使用此调用导出为XML:

    varxml = Blockly.Xml.workspaceToDom(workspace);varxml_text = Blockly.Xml.domToText(xml);

    这将产生一个最小(但很丑)的字符串,在这个字符串中包含了用户模块的XML结构。如果希望获得更易读(但更大)的字符串,请改用Blockly.Xml.domToPrettyText()。

    导入

    从XML字符串表示的中恢复到块的过程非常简单:

    varxml = Blockly.Xml.textToDom(xml_text);Blockly.Xml.domToWorkspace(xml, workspace);

    云储存

    Blockly提供可选的云存储功能。它使用户能够保存,加载,共享和发布他们的程序。如果您的项目托管在App Engine上,则可以利用此服务。

    作者:filex

    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

        本文标题:【blockly入门指引】2, 在网页中使用blockly

        本文链接:https://www.haomeiwen.com/subject/wdczwftx.html