Cesium:信息框主题
Cesium: Theming the InfoBox
我在 Google 组上看到了几个示例,它们演示了如何修改信息框的 css。在此特定示例中,javascript 用于将 css link 附加到文档的头部:
https://groups.google.com/forum/#!topic/cesium-dev/f0iODd42PeI
var cssLink = frameDocument.createElement("link");
cssLink.href = buildModuleUrl('Path/To/Your/CSS/File.css');
cssLink.rel = "stylesheet";
cssLink.type = "text/css";
viewer.infoBox.frame.contentDocument.head.appendChild(cssLink);
然而,这并没有导致我的标记样式发生任何变化。
充其量,我已经能够通过在加载 geoJson 数据集之后迭代 .then 函数调用中的实体来包装信息框的内容。包装内容时,我可以设置在生成的标记中很明显的样式值。
var dataSource = Cesium.GeoJsonDataSource.load('../data/mGeoJson.json').then(function(data) {
viewer.dataSources.add(data);
var entities = data.entities.values;
for (var i = 0; i < entities.length; i++)
var entity = entities[i];
if (entity.properties.hasOwnProperty("description")) {
entity.description = '<div style="height: 360px;">' + entity.properties.description
+ '</div>';
}
}
}
这很有用,但不能完全满足我的应用程序的要求。
有人可以提供更多关于覆盖信息框主题的见解,而不必遍历实体来修改其描述属性的值吗?
值得一提的是,我已经成功地修改了信息框的主题,只需将我的 css 文件导入到文档的头部即可。我不确定为什么我不能直接用样式表修改它,因为它以前没有影响信息框的外观,这个问题反映在我在 cesium-dev Google 中找到的帖子中团体。无论如何,它现在似乎工作得很好。
这里原来的解决方案是行不通的,因为 infoBox 是一个 iframe,当你试图修改它时,它还没有被异步加载。
相反,您可以向 iframe 添加 load
侦听器,如下所示:
var viewer = new Cesium.Viewer('cesiumContainer');
var frame = viewer.infoBox.frame;
frame.addEventListener('load', function () {
var cssLink = frame.contentDocument.createElement('link');
cssLink.href = Cesium.buildModuleUrl('Path/To/Your/CSS/File.css');
cssLink.rel = 'stylesheet';
cssLink.type = 'text/css';
frame.contentDocument.head.appendChild(cssLink);
}, false);
这会等待 iframe 准备好接收修改,然后应用它。
我在 Google 组上看到了几个示例,它们演示了如何修改信息框的 css。在此特定示例中,javascript 用于将 css link 附加到文档的头部:
https://groups.google.com/forum/#!topic/cesium-dev/f0iODd42PeI
var cssLink = frameDocument.createElement("link");
cssLink.href = buildModuleUrl('Path/To/Your/CSS/File.css');
cssLink.rel = "stylesheet";
cssLink.type = "text/css";
viewer.infoBox.frame.contentDocument.head.appendChild(cssLink);
然而,这并没有导致我的标记样式发生任何变化。
充其量,我已经能够通过在加载 geoJson 数据集之后迭代 .then 函数调用中的实体来包装信息框的内容。包装内容时,我可以设置在生成的标记中很明显的样式值。
var dataSource = Cesium.GeoJsonDataSource.load('../data/mGeoJson.json').then(function(data) {
viewer.dataSources.add(data);
var entities = data.entities.values;
for (var i = 0; i < entities.length; i++)
var entity = entities[i];
if (entity.properties.hasOwnProperty("description")) {
entity.description = '<div style="height: 360px;">' + entity.properties.description
+ '</div>';
}
}
}
这很有用,但不能完全满足我的应用程序的要求。
有人可以提供更多关于覆盖信息框主题的见解,而不必遍历实体来修改其描述属性的值吗?
值得一提的是,我已经成功地修改了信息框的主题,只需将我的 css 文件导入到文档的头部即可。我不确定为什么我不能直接用样式表修改它,因为它以前没有影响信息框的外观,这个问题反映在我在 cesium-dev Google 中找到的帖子中团体。无论如何,它现在似乎工作得很好。
这里原来的解决方案是行不通的,因为 infoBox 是一个 iframe,当你试图修改它时,它还没有被异步加载。
相反,您可以向 iframe 添加 load
侦听器,如下所示:
var viewer = new Cesium.Viewer('cesiumContainer');
var frame = viewer.infoBox.frame;
frame.addEventListener('load', function () {
var cssLink = frame.contentDocument.createElement('link');
cssLink.href = Cesium.buildModuleUrl('Path/To/Your/CSS/File.css');
cssLink.rel = 'stylesheet';
cssLink.type = 'text/css';
frame.contentDocument.head.appendChild(cssLink);
}, false);
这会等待 iframe 准备好接收修改,然后应用它。