Reactjs - 谷歌地图 - 样式信息窗口

IT技术 javascript google-maps-api-3 reactjs
2021-05-24 12:24:11

我正在尝试更改 InfoWindow 中的样式

这是我使用的代码:

<InfoWindow options={{maxWidth: 900}} position={self.state.position} ref="infoWindow" onCloseclick={self.onLineWindowClose}>
    <div className="berlin" style={{height: '120px',width: '260px', fontFamily: 'Roboto'}}>
        <div style={{height: '20px'}}>
            <div style={{float: 'left', padding: '3px 0 0 6px'}}>From: </div>
            <div style={{float: 'left', padding: "3px", color: '#3497d9'}}>{self.state.startLocation.City}</div>
        </div>
        <div style={{height: '20px', clear: 'both'}}>
            <div style={{float: 'left', padding: '3px 0 0 6px'}}>To: </div>
            <div style={{float: 'left', padding: "3px", color: '#3497d9'}}>{self.state.endLocation.City}</div>
        </div>
        <LineList relationInfo={this.state.relationDetails} />
    </div>
</InfoWindow>

问题很简单。我如何改变它的外观?我尝试设置类名。我也尝试将选项传递给它。但似乎没有任何效果。

2个回答

对于使用 InfoBox 并且在样式上有问题的任何人,以下对我有用:

JS

<InfoBox key={i}
    defaultPosition={new google.maps.LatLng(marker.lat, marker.lng)}
    options={{
        pane: "overlayLayer",
        pixelOffset: new google.maps.Size(-140, -60),
        alignBottom: true,
        boxStyle: {
            boxShadow: `3px 3px 10px rgba(0,0,0,0.6)`
        },
        closeBoxURL : ""
    }}
>
    <div className="google_map_infobox">
        {marker.txt}
    </div>
</InfoBox>

CSS

.google_map_infobox
{
    background: #fff;
    padding: 1em;
    text-align: center;
    font-size: 1.1rem;
    box-shadow: 3px 3px 10px rgba(0,0,0,0.6);
    border: 1px solid #666;
}

这会创建一个以标记为中心的框,并且有框阴影,没有关闭按钮等。这个boxStyle选项是我在谷歌搜索中偶然发现的。

我还使用 CSS 对盒子进行了一些样式设置。也许我可以在 boxStyle 属性中完成所有这些,但我宁愿尽可能多地在 CSS 中保留它。box-shadow 是唯一不能通过 CSS 工作的东西。

希望这有助于有人使用react-google-maps.

我建议为谷歌地图创建自己的组件,并使用“普通”javascript 创建自定义信息窗口。这样你就可以直接使用所有谷歌地图的“本机”属性等,不需要使用任何超级复杂和有限的组件库:)

用于react的示例谷歌地图包装器(只是快速示例):

import React, { Component, PropTypes } from 'react';

class GoogleMap extends Component {

  componentDidMount() {
    this.map = new google.maps.Map(this.refs.map, {
      scrollwheel: true,
      zoom: 13,
      draggable: true,
      mapTypeControl: false,
      streetViewControl: false,
      zoomControlOptions: {
        position: google.maps.ControlPosition.TOP_LEFT,
        style: google.maps.ZoomControlStyle.LARGE,
      },
      center: new google.maps.LatLng(60.16985569999999, 24.938379),
    });

    this.props.onGetMap(this.map);
  }

  render() {
    const mapStyle = {
      height: '100%',
      width: '100%',
    };

    return (
      <div ref="map" style={mapStyle}></div>
    );
  }
}

GoogleMap.propTypes = {
  onGetMap: PropTypes.func.isRequired,
};

export default GoogleMap;

然后你可以像这样使用它:

示例信息窗口: