Popup2D信息弹出窗标记
Popup2D信息弹出窗是基于threejs中 CSS2DObject 实现的div信息弹出窗标记。
常用方法
| 方法 | 描述 |
|---|---|
| addTo | 增加弹出信息框 |
| isOpen | 弹出信息框是否打开 |
| remove | 移除弹出信息框 |
| getPosition | 获取位置 |
| setPosition | 设置位置 |
| isShow | 是否显示 |
| show | 显示 |
| hide | 隐藏 |
| getElement | 获取信息弹出框元素。⚠️ 在 addTo(app) 且已 setHTML/setText 设置内容之前返回 undefined;任何时候都可改用继承自 three CSS2DObject 的 element 属性(如 popup2d.element,同一个 div) |
| setText | 设置信息弹出框信息内容 |
| setHTML | 设置信息弹出框html内容 |
| setDOMContent | 将弹出窗口的内容设置为作为DOM节点提供的元素 |
| getMaxWidth | 获取信息弹出框最大宽度 |
| setMaxWidth | 设置信息弹出框最大宽度 |
| addClassName | 将CSS类名添加到弹出容器元素中。 |
| removeClassName | 从弹出式容器元素中删除一个CSS类。 |
| setOffset | 设置信息弹出框偏移量 |
| toggleClassName | 在弹出容器上添加或删除给定的CSS类,具体取决于容器当前是否具有该类。 |
| setColor | 设置颜色 |
| update | 更新 |
| setOpacity | 设置透明度 |
信号名
| 方法 | 描述 |
|---|---|
| open | 打开 |
| close | 关闭 |
| elementSizeReady | 元素大小准确好了已有 |
对于div的事件,可以通过getElement获取div元素,对此div增加事件(须在 addTo 且设置内容之后;之前请用 popup2d.element)。
如
popup2d.getElement().addEventListener("dblclick", event => {
console.log("双击")
});
用法示例
创建一个popup2d
const popup = new vjmap3d.Popup2D({
backgroundColor: "#A0FFA0",
buttonColor: "#f00",
closeOnClick: false,
closeButton: true,
showArrow: true
})
.setHTML(`<h3 style="color:#00f">Hello, VJMAP3D</h3>`)
.setPosition(2, 0, 1)
.addTo(app);
let svc = new vjmap3d.Service(env.serviceUrl, env.accessToken);
let app = new vjmap3d.App(svc, {
container: "map", // 容器id
stat: { show: true, left: "0" },
scene: {
gridHelper: { visible: true } // 是否显示坐标网格
},
camera: { // 相机设置
viewHelper: { enable: true, position: "leftBottom" } // 是否显示视角指示器
}
})
const popup = new vjmap3d.Popup2D({
backgroundColor: "#A0FFA0",
buttonColor: "#f00",
closeOnClick: false,
closeButton: true,
showArrow: true
})
.setHTML(`Hello, VJMAP3D
`)
.setPosition(2, 0, 1)
.addTo(app);
做为一个对象的子节点
const mesh = new THREE.Mesh(
new THREE.SphereGeometry( 0.3, 16, 16 ),
new THREE.MeshBasicMaterial( { color: 0x00ff00 } )
)
mesh.position.set(4, 0, 0);
app.scene.add(mesh);
let popup = new vjmap3d.Popup2D({
backgroundColor: "#0ff",
closeButton: false,
})
popup.setPosition([0, 0.4, 0]); // 设置位置
popup.setHTML("我是mesh的子对象");
popup.addTo(mesh, app)
let svc = new vjmap3d.Service(env.serviceUrl, env.accessToken);
let app = new vjmap3d.App(svc, {
container: "map", // 容器id
scene: { // 场景设置
gridHelper: { visible: true } // 是否显示坐标网格
}
})
const mesh = new THREE.Mesh(
new THREE.SphereGeometry( 0.3, 16, 16 ),
new THREE.MeshBasicMaterial( { color: 0x00ff00 } )
)
mesh.position.set(4, 0, 0);
app.scene.add(mesh);
let popup = new vjmap3d.Popup2D({
backgroundColor: "#0ff",
closeButton: false,
})
popup.setPosition([0, 0.4, 0]); // 设置位置
popup.setHTML("我是mesh的子对象");
popup.addTo(mesh, app)
//
let angle = 0;
app.signal.onAppUpdate.add(() => {
angle += 0.01; // 控制旋转速度
mesh.position.x = 4 * Math.cos(angle);
mesh.position.z = 4 * Math.sin(angle);
})