drawThemeStyles

生成 mapbox-gl-draw 主题样式数组,支持要素级 user_color 覆盖。

简介

drawThemeStyles 依据主题选项生成完整的 mapbox-gl-draw styles 数组,配合 userProperties: true 使用;颜色取 coalesce(user_color, 主题色),要素级 user_color 可覆盖主题色。

@movk/mapbox 自动导入,无需手写 import。

用法

切换主色生成主题样式(预置多边形即时呈现):

<script setup lang="ts">
import { computed } from 'vue'
import type { Feature } from 'geojson'

const props = withDefaults(defineProps<{ color?: string }>(), {
  color: '#8b5cf6'
})

// 预置多边形,主题色即时可见
const features = ref<Feature[]>([
  {
    type: 'Feature',
    properties: {},
    geometry: {
      type: 'Polygon',
      coordinates: [
        [
          [116.38, 39.9],
          [116.41, 39.9],
          [116.41, 39.92],
          [116.38, 39.92],
          [116.38, 39.9]
        ]
      ]
    }
  }
])

const options = computed(() => ({
  displayControlsDefault: false,
  userProperties: true,
  styles: drawThemeStyles({ color: props.color })
}))
</script>

<template>
  <div class="h-115 w-full overflow-hidden rounded-(--ui-radius) border border-default">
    <MapboxMap
      :options="{ style: 'mapbox://styles/mapbox/light-v11', center: [116.395, 39.91], zoom: 12 }"
    >
      <!-- color 变化经 :key 重建控件按新主题重绘 -->
      <MapboxDrawControl :key="color" v-model:features="features" :options="options" />
    </MapboxMap>
  </div>
</template>

API

drawThemeStyles()

入参 options: DrawThemeOptions(省略用默认值),返回 StyleSpec[],可直接传给 MapboxDrawControloptions.styles

color
string
非激活态主色,默认 #3b82f6
activeColor
string
激活态(绘制 / 选中)主色,默认 #f59e0b
fillOpacity
number
多边形填充不透明度,默认 0.1
lineWidth
number
线宽,默认 2
vertexRadius
number
顶点圆半径,默认 5

Changelog

No recent changes
Copyright © 2026 - 2026 YiXuan - MIT License