mapbox添加自定义控件
需要定义一个类,然后至少重写实现onAdd
、onRemove
方法,示例如下
<template>
<div ref="changeViewRef" @click="changeView" class="changeView mapboxgl-ctrl">
<el-tooltip
class="box-item"
effect="dark"
:content="`${mapStore.mode}视图`"
placement="left"
>
<el-icon><Refresh /></el-icon>
</el-tooltip>
</div>
</template>
<script setup>
import G from "@/config";
import useMapStore from "@/store/modules/map";
const mapStore = useMapStore();
const changeViewRef = ref();
onMounted(() => {
G.map.addControl(new MyCustomControl(changeViewRef.value), "bottom-right");
});
const changeView = () => {
if (mapStore.mode == "2D") {
G.map.setProjection("globe");
mapStore.mode = "3D";
} else {
G.map.setProjection("mercator");
mapStore.mode = "2D";
}
};
class MyCustomControl {
constructor(ref) {
this.container = ref;
}
onAdd() {
return this.container;
}
onRemove() {
this.container.parentNode.removeChild(this.container);
}
}
</script>
<style lang="scss" scoped>
.changeView {
width: 29px;
height: 29px;
padding: 5px;
border-radius: 4px;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
.changeView:hover {
opacity: 0.8;
}
</style>
点击查看代码
import MyCustomControl from "@/utils/mapCustomControl";
onMounted(() => {
map.addControl(new MyCustomControl(DOM), "bottom-right");
});
export default class MyCustomControl {
constructor(ref, options) {
this.container = ref;
this.controlContainer = null;
this.addClass = options?.defaultClass ?? true; // 是否添加默认样式mapboxgl-ctrl&mapboxgl-ctrl-group
}
getDefaultPosition() {
const defaultPosition = "top-right";
return defaultPosition;
}
onAdd() {
if (this.addClass) {
this.controlContainer = document.createElement("div");
this.controlContainer.classList.add("mapboxgl-ctrl");
this.controlContainer.classList.add("mapboxgl-ctrl-group");
this.controlContainer.appendChild(this.container);
return this.controlContainer;
} else {
return this.container;
}
}
onRemove() {
if (this.addClass) {
this.controlContainer.parentNode.removeChild(this.controlContainer);
} else {
this.container.parentNode.removeChild(this.container);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2022-06-12 Bitmap 与ImageSource之间的转换