react+百度地图实现自定义图标

开发环境

  1. react
  2. 百度地图使用的是:rc-bmap

实现效果

图片描述

实现图中提示框的效果。
看到这个,用过百度地图的第一个会想到 marker,其实不是,用的是 Label,其实难点不在这,这个看看 API,都能很快琢磨出来。

难点

  1. 如何显示成带图标的那个外框
  2. 里面的内容如何换行,及设置样式

思路

看了 API,Marker不能显示内容,但Marker可以使用Label属性,其实也是用的Label
所以开始研究 Label,首先Label是显示内容的,但是labelcontent属性只能是string,这就麻烦了,怎么控制字体显示呢,怎么设置样式呢?
原来是使用了 jsx 的语法来写,显示的是[Object Object],显然不支持啊。

解决方法

最后根据经验试了下 html 字符串,字符串上套了层 div,原以为 div 会显示出来,结果没有。

1
2
3
4
5
6
7
8
<Label
content={`<div>骑手正在取件途中</div><div>1.8公里</div>`}
point={point}
offset={courierOffset}
massClear={false}
zIndex={100} // 同html的z-index
style={labelStyle}
/>

于是就知道这个是支持hmtl字符串的;
这样换行控制是解决了,接下来是样式,按照 jsx 的语法写,没效果,想着也合理。

1
content={`<div>骑手正在取件途中</div><div className={${styles.label}}>1.8公里</div>`}

于是又试了直接写 class

1
content={`<div>骑手正在取件途中</div><div class='label'>1.8公里</div>`}

这样感觉也不合理,因为样式需要 babel 编译的,直接这样写,是识别不了的。
因此就有了解决方案

1
content={`<div>骑手正在取件途中</div><div class='${styles.label}'>1.8公里</div>`}

外框的实现

外框其实通过设置 Label 的 style 来实现。

相关 code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import courierLabelBG from "./images/courier_label_bg.svg"; //图片中带有前面的小车

const point = {
lng: 116.404,
lat: 39.915,
};
const { Description } = DescriptionList;
const ButtonGroup = Button.Group;
const labelStyle = {
backgroundImage: `url(${courierLabelBG})`,
backgroundRepeat: "no-repeat",
backgroundSize: "cover",
backgroundColor: "rgba(0, 0, 0, 0)",
border: "none",
color: "rgba(51,51,51,1);",
paddingLeft: "54px",
paddingTop: "8px",
fontWeight: "400",
width: "181px",
height: "52px",
};
const courierOffset = {
width: -92,
height: -54,
};

<Map ak="WAeVpuoSBH4NswS30GNbCRrlsmdGB5Gv" scrollWheelZoom>
<Label
content={`<div>骑手正在取件途中</div><div class='${styles.courierLabel}'>1.8公里</div>`}
point={point}
offset={courierOffset}
massClear={false}
zIndex={100} // 同html的z-index
style={labelStyle}
/>
</Map>;
文章作者: wenmu
文章链接: http://blog.wangpengpeng.site/2020/02/28/react-%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9B%BE%E6%A0%87/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 温木的博客
微信打赏