• 编写面板界面
    • 定制你的模板
    • 界面排版
    • 添加 UI 元素
    • 为 UI 元素添加逻辑交互

    编写面板界面

    Cocos Creator 的面板界面使用 HTML5 标准编写。你可以为界面指定 HTML 模板和 CSS 样式,然后对界面元素绑定消息编写逻辑和交互代码。如果你之前有过前端页面编程经验,那么这些内容对你来说再熟悉不过。而没有前端编程经验的开发者也不必太担心,通过本节的学习,将可以让你在短时间内掌握 Creator 面板界面的编写技巧。

    定制你的模板

    通常在开始编写界面之前,我们总是希望能够在界面中看见点什么。我们可以通过面板定义函数的 templatestyle 选项来稍微在面板界面上绘制点东西。

    一般我们会选择绘制一些区块用于规划界面布局,我们可以写以下代码:

    1. Editor.Panel.extend({
    2. style: `
    3. .wrapper {
    4. box-sizing: border-box;
    5. border: 2px solid white;
    6. font-size: 20px;
    7. font-weight: bold;
    8. }
    9. .top {
    10. height: 20%;
    11. border-color: red;
    12. }
    13. .middle {
    14. height: 60%;
    15. border-color: green;
    16. }
    17. .bottom {
    18. height: 20%;
    19. border-color: blue;
    20. }
    21. `,
    22. template: `
    23. <div class="wrapper top">
    24. Top
    25. </div>
    26. <div class="wrapper middle">
    27. Middle
    28. </div>
    29. <div class="wrapper bottom">
    30. Bottom
    31. </div>
    32. `,
    33. });

    通过以上代码,我们获得了一个如下的界面效果:

    panel-01

    界面排版

    界面排版是通过在 style 中书写 CSS 来完成的。在上面的例子中,我们已经对界面做了简单的排版。如果对 CSS 不熟悉,推荐大家可以阅读 W3 School 的 CSS 教程 来加强。

    在界面排版过程中,有时候我们希望更好的表达元素之间的布局关系,比如我们喜欢 Top 和 Bottom 元素的高度固定为 30px,而 Middle 元素的高度则撑满剩余空间。这个时候我们就可以使用 CSS Flex 布局来制作。

    我们可以这么修改 style 部分:

    1. Editor.Panel.extend({
    2. style: `
    3. :host {
    4. display: flex;
    5. flex-direction: column;
    6. }
    7. .wrapper {
    8. box-sizing: border-box;
    9. border: 2px solid white;
    10. font-size: 20px;
    11. font-weight: bold;
    12. }
    13. .top {
    14. height: 30px;
    15. border-color: red;
    16. }
    17. .middle {
    18. flex: 1;
    19. border-color: green;
    20. }
    21. .bottom {
    22. height: 30px;
    23. border-color: blue;
    24. }
    25. `
    26. });

    由于 CSS Flex 布局语法有些复杂,为了方便大家使用,Cocos Creator 对这部分进行了重新包装,关于这部分的详细介绍,请阅读 界面排版。

    添加 UI 元素

    规划好布局后,我们就可以考虑加入界面元素来完成界面功能。通常,熟悉前端编程的开发人员会想到一些常用的界面元素,如 <button><input> 等等。这些元素当然是可以直接被使用,但是我们强烈推荐大家使用Cocos Creator 的内置 UI Kit 元素。这些内置元素都是以 ui- 开头,例如 <ui-button><ui-input>。Cocos Creator 提供了非常丰富的内置元素,开发人员可以通过 掌握 UI Kit 章节获得更详细的了解。

    内置元素不但在样式上经过细致的调整,同时也统一了消息发送规则并且能够更好的处理 focus 等系统事件。

    让我们稍微丰富一下我们上面的面板:

    1. Editor.Panel.extend({
    2. style: `
    3. :host {
    4. display: flex;
    5. flex-direction: column;
    6. margin: 5px;
    7. }
    8. .top {
    9. height: 30px;
    10. }
    11. .middle {
    12. flex: 1;
    13. overflow: auto;
    14. }
    15. .bottom {
    16. height: 30px;
    17. }
    18. `,
    19. template: `
    20. <div class="top">
    21. Mark Down 预览工具
    22. </div>
    23. <div class="middle layout vertical">
    24. <ui-text-area resize-v value="请编写你的 Markdown 文档"></ui-text-area>
    25. <ui-markdown class="flex-1"></ui-markdown>
    26. </div>
    27. <div class="bottom layout horizontal end-justified">
    28. <ui-button class="green">预览</ui-button>
    29. </div>
    30. `,
    31. });

    如果一切正常,你将会看到如下界面:

    panel-02

    为 UI 元素添加逻辑交互

    最后让我们通过标准的事件处理代码来完成面板的逻辑部分。假设我们需要在每次点击预览按钮后,都会将 text-area中输入的 Markdown 文档,渲染并显示在下方。我们可以做如下代码操作:

    1. Editor.Panel.extend({
    2. // ...
    3. $: {
    4. txt: 'ui-text-area',
    5. mkd: 'ui-markdown',
    6. btn: 'ui-button',
    7. },
    8. ready () {
    9. this.$btn.addEventListener('confirm', () => {
    10. this.$mkd.value = this.$txt.value;
    11. });
    12. // init
    13. this.$mkd.value = this.$txt.value;
    14. },
    15. });

    这里我们通过 $ 选择器,预先索引了我们需要的 ui 元素。在利用 HTML 标准 API addEventListener为元素添加事件。对于内置 UI Kit 元素,每个 UI 元素都拥有一组标准事件,他们分别是:cancelchangeconfirm。同时,多数 UI 元素都会携带 value 属性,记录元素内相关的值信息。

    希望通过本节的代码示例,能够启发你进行面板界面开发的工作。当然,要灵活运用面板界面,还是需要深入学习和掌握 HTML5 标准。