需求:点击某实体后,添加div,并在实体上方位置显示。转动地球后,div位置不断更新。
运行效果
初始
点击圆点实体后
转动地球
代码
<!DOCTYPE html>
<html lang="ch">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="Cesium-1.66/Build/Cesium/Widgets/widgets.css">
<style>
#map3d {
height: 400px;
width: 600px;
margin: 0 auto;
position: relative;
}
.info {
height: 50px;
width: 50px;
background-color: yellow;
position: absolute;
z-index: 2;
left: 0;
top: 0;
}
</style>
</head>
<body>
<div id="map3d">
<div id="info" class="info">自行设置样式</div>
</div>
</body>
<script src="Cesium-1.66/Build/Cesium/Cesium.js"></script>
<script src="jQuery.js"></script>
<script>
viewer = new Cesium.Viewer('map3d', {
selectionIndicator: false,
animation: false,
baseLayerPicker: false,
timeline: false,
sceneModePicker: true,
navigationHelpButton: false,
useDefaultRenderLoop: true,
showRenderLoopErrors: true,
fullscreenButton: false,
infoBox: false,
imageryProvider: new Cesium.UrlTemplateImageryProvider({
url: "http://mt1.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}&s=Gali"
})
});
let adjustmentPixel = function () {
var supportsImageRenderingPixelated = viewer.cesiumWidget._supportsImageRenderingPixelated;
if (supportsImageRenderingPixelated) {
var vtxf_dpr = window.devicePixelRatio;
while (vtxf_dpr >= 2.0) {
vtxf_dpr /= 2.0;
}
viewer.resolutionScale = vtxf_dpr;
}
};
adjustmentPixel();
viewer.scene.postProcessStages.fxaa.enabled = false;
viewer.scene.fxaa = false;
viewer._cesiumWidget._creditContainer.style.display = "none";
viewer.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(116.46, 39.92, 10000000.0),
});
let handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
viewer.entities.add(new Cesium.Entity({
id: `点`,
name: '点',
show: true,
position: Cesium.Cartesian3.fromDegrees(115.253333, 39.26111),
point: new Cesium.PointGraphics({
show: true,
pixelSize: 5,
heightReference: Cesium.HeightReference.NONE,
color: new Cesium.Color(255, 255, 0, 1),
outlineColor: new Cesium.Color(0, 0, 0, 0),
outlineWidth: 0,
scaleByDistance: new Cesium.NearFarScalar(0, 1, 5e10, 1),
translucencyByDistance: new Cesium.NearFarScalar(0, 1, 5e10, 1),
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 4.8e10),
})
}));
handler.setInputAction(function (event) {
let $info = $('#info');
let pick = viewer.scene.pick(event.position);
let c = new Cesium.Cartesian2(event.position.x, event.position.y);
function update(c) {
let x = c.x - ($info.width()) / 2;
let y = c.y - ($info.height()) - 5;
$info.css('transform', 'translate3d(' + x + 'px, ' + y + 'px, 0)');
}
viewer.scene.postRender.addEventListener(function () {
let changedC = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, pick.primitive._actualPosition);
if (c && changedC && c.x && changedC.x && c.y && changedC.y) {
if ((c.x !== changedC.x) || (c.y !== changedC.y)) {
update(changedC);
c = changedC;
}
}
});
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
</script>
</html>