2.19 网页窗口类(Window)

当用户需要在三维地图上进行弹窗展示,就需要用到网页窗口类。

网页窗口类是为了解决开发者自身网页元素,如div标签,不能覆盖在三维场景之上的问题所采用的技术手段,使用了IE内核的和Chromium内核的微型浏览器窗口,来加载开发者的网页,该窗口能时刻保持覆盖三维场景,因此可以实现开发者想要的效果。

网页窗口显示的内容,是url所指向的网页,如下图,创建了一个StaticWindow类型的窗口,设置其width及height值为“100%”,表示该窗口大小与地球窗口大小位置一致,实现了悬浮透明效果(透明效果是在url所指向的网页的样式中设置的):

整体UI覆盖效果

网页窗口类分为静态窗口(StaticPopWindow)动态窗口(DynamicWindow)

静态窗口在创建时就固定了其显示的位置,不随着三维地图场景内容变化而变化,一般适用于充当前端UI界面或者固定屏幕位置的信息展示。

动态窗口则由创建时的 position 属性确定其在三维场景中绑定的位置,当场景发生变化时,窗口也会发生移动。

浏览器内核

动态窗口仅支持IE内核模式,静态窗口可支持IE内核与Chromium内核模式。

browserType 属性可以指定使用何种浏览器内核来加载你的网页,因此你需要确保你的网页的兼容性,能正常运行在你所设置的浏览器内核中。

这里需要注意的是,使用IE内核窗口的情况下,通过 ieAlpha 属性来控制,对其设置半透明效果,是对网页整体元素生效的,如图:

IE效果

对于这种效果不满意的开发者,可使用Chromium内核窗口,当使用这种方式时,ieAlpha 属性将失效,开发者只需通过css样式的透明属性来实现相应网页效果即可,无需关注窗口本身透明参数,如图:

Chromium效果

网页窗口类具有添加、删除、更新的过程,可参考2.8 对象基本操作2.9 空间分析绘制类(Analysis)

注意:url属性不可更新,如需新的url地址,请删除窗口后再重新创建具有新url的网页窗口。

父子窗口交互

用户通过该功能将网页弹出在三维地图指定位置,通常来说,还需要两者进行交互,才能实现完整的弹窗功能。

在这里,为了方便说明,我们将弹窗窗口称之为子窗口,三维场景所在窗口为父窗口

1.父窗口发送消息至子窗口

父窗口发送消息较为简单,通过如下代码:

window.update({
    //子窗口待触发的函数名
    trigger: "Test",
    //子窗口待触发的函数参数,如Test(1234)
    triggerParam: "1234"
});

在子窗口处理消息页面上,需指定响应的函数:

function Test(id) {
    console.log("你调用了Test: " + id);
}

父窗口发送消息至子窗口

你可以在Test函数中,通过id的区别,来实现不同的代码调用。

2.子窗口发送消息至父窗口

在创建子窗口时,需注意在建立父子窗口消息的绑定关系,如:

var window = new CooSDK.DynamicPopWindow({
    url: gPopHtmlUrl,
    position: new CooSDK.PositionObj(120.21874782, 30.2098158, 15),
    customCallback: {
         //123为子窗口待发送的消息id;getResult123为父窗口响应id为123的回调函数
         123: getResult123,
         //456为子窗口待发送的消息id;getResult456为父窗口响应id为456的回调函数
         456: getResult456
    }
});

根据子窗口浏览器内核的不同,消息的触发方式也存在区别:

IE内核:

var id = 123;
window.external.PushData(id);

Chromium内核:

var id = 123;
window.PushData(id);

子窗口发送消息至父窗口

只要父子窗口建立起上文的对应关系,就能进行交互。

results matching ""

    No results matching ""