基于EarthSDK的自定义UI实现

        EarthSDK 通过EarthUI提供一套官方风格的UI。如果我们想要基于官方的UI风格,定制自己的菜单栏、右键菜单、树形列表等行为,貌似没有提供标准的接口,需要自己去修改。

        这里把我修改过的UI整理分享如下。

  • mainbar 主菜单修改:

XbsjEarthUI.js 中描述菜单项的位置,依次增加就可以了。

 

  • contextmenu 修改:

菜单下的rabbion面板,需要在另一个地方定义。EarthSDK是通过自己封装的一套模板动态生成的dom结构,由于源码混淆重命名,能力有限,没有找到实现的逻辑。所以只能自己动态创建dom结构,对于前端的小伙伴应该没啥难度。

下面是我在官方菜单【其他】下新增的自定义功能入口

运行效果如下图:

 

以上应该没什么难度,但是前提需要稍微格式化一下XbsjEarthUI.js的结构,通过元素定位到具体的位置,整理出默认的模板结构,依次添加就可以了。 

  • 右键菜单修改:

右键菜单等属于自定义UI的范畴,官方的demo中有对应的源码可以参考

内置UI组件icon-default.png?t=LA92http://earthsdk.com/v/last/Apps/Examples/?menu=true&url=./earthui-xbsjUI.html我这里稍稍扩展的右键菜单的项的数量,发现数量有限制,如果菜单项太多,前面增加的菜单项会被挤掉。这里也能看出来,其实官方其实把更多的精力放在数据处理,毕竟那是真金白银啊。

通过为contextMenu的pop方法传入一个数组,数组包含菜单名称,以及响应。

this.$root.$earthUI.contextMenu.pop([{
                        text: '1号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMONE);
                        }
                    },{
                        text: '2号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMTWO);
                        }
                    },{
                        text: '3号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMTHREE);
                        }
                    },
                    {
                        text: '4号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMFOUR);
                        }
                    },
                    {
                        text: '5号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMFIVE);
                        }
                    },
                    {
                        text: '6号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMSIX);
                        }
                    },
                    {
                        text: '7/8号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMSEVEN);
                        }
                    },
                    {
                        text: '9/10号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMNINE);
                        }
                    },
                    {
                        text: '11号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMELEVEN);
                        }
                    },
                    {
                        text: '12/13号宿舍楼',
                        func: () => {
                            this.click(app.switchLayoutMgr.enum.DORM_NUMTWEL);
                        }
                    },
                ]);

看下效果

  • 树形列表修改:

树形列表主要挂在earthUI.earth.sceneTree.root下,可以动态添加,也可以通过json结构去创建。我是通过json结构创建的列表,又发现了bug,默认的模型信息无法实现【unchecked】的状态,但是亚平组可以实现unchecked。具体原因不详。

局部参考如下:

我对默认的check状态进行了简单的管理,实现显示隐藏,以及ID的切换,大概位置在

 

  • 提示信息修改:

 默认行为,每次加载完成一个SceneTree的节点后,会打印一条提示信息,我在这里增加了一个回调,用于处理模型本身初始化的一些行为。

 

  • 鼠标事件

鼠标略过的交互行为,是在XbsjEarth.js中实现的。

         由于使用EarthSDK时间不长,且无源码,所以自定义的部分非常分散,不好管理。在官方的文档中找了很久,貌似都没有这部分内容。或者说的很隐晦,或者没有案例。遇到很多问题。通过以上的一些修改和尝试,基本把常用的问题解决的差不多。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老朱自强不息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值