当前位置: 首页 > 面试题库 >

样式化Google Maps InfoWindow

江鸿羲
2023-03-14
问题内容

我一直在尝试为GoogleMaps设置样式InfoWindow,但是文档在此主题上非常有限。您如何设计风格InfoWindow


问题答案:

Google编写了一些代码来协助完成此任务。以下是一些示例:使用InfoBubble,样式标记和“ 信息窗口自定义”(使用OverlayView)的示例。

上面链接中的代码采用不同的路线来获得相似的结果。要点是直接设置InfoWindows的样式并不容易,使用附加的InfoBubble类而不是InfoWindow或覆盖GOverlay可能会更容易。另一种选择是使用javascript(或jQuery)来修改InfoWindow的元素,就像后来的ATOzTOA建议的那样。

这些示例中最简单的示例可能是使用InfoBubble而不是InfoWindow。通过导入此文件(您应该自己托管)可以使用InfoBubble:http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobubble/src/infobubble.js

InfoBubble的Github项目页面。

与InfoWindow相比,InfoBubble具有非常好的风格:

 infoBubble = new InfoBubble({
      map: map,
      content: '<div class="mylabel">The label</div>',
      position: new google.maps.LatLng(-32.0, 149.0),
      shadowStyle: 1,
      padding: 0,
      backgroundColor: 'rgb(57,57,57)',
      borderRadius: 5,
      arrowSize: 10,
      borderWidth: 1,
      borderColor: '#2c2c2c',
      disableAutoPan: true,
      hideCloseButton: true,
      arrowPosition: 30,
      backgroundClassName: 'transparent',
      arrowStyle: 2
});

infoBubble.open();

您还可以使用给定的地图和标记对其进行调用以在以下位置打开:

infoBubble.open(map, marker);

作为另一个示例,“信息窗口自定义”示例从Google Maps API扩展了GOverlay类,并将其用作创建更灵活的信息窗口的基础。首先创建类:

/* An InfoBox is like an info window, but it displays
 * under the marker, opens quicker, and has flexible styling.
 * @param {GLatLng} latlng Point to place bar at
 * @param {Map} map The map on which to display this InfoBox.
 * @param {Object} opts Passes configuration options - content,
 *   offsetVertical, offsetHorizontal, className, height, width
 */
function InfoBox(opts) {
  google.maps.OverlayView.call(this);
  this.latlng_ = opts.latlng;
  this.map_ = opts.map;
  this.offsetVertical_ = -195;
  this.offsetHorizontal_ = 0;
  this.height_ = 165;
  this.width_ = 266;

  var me = this;
  this.boundsChangedListener_ =
    google.maps.event.addListener(this.map_, "bounds_changed", function() {
      return me.panMap.apply(me);
    });

  // Once the properties of this OverlayView are initialized, set its map so
  // that we can display it.  This will trigger calls to panes_changed and
  // draw.
  this.setMap(this.map_);
}

之后,它将继续覆盖GOverlay:

InfoBox.prototype = new google.maps.OverlayView();

然后,您应该重写你需要的方法:createElementdrawremovepanMap。它相当复杂,但是从理论上讲,您现在只是自己在地图上绘制div,而不是使用普通的信息窗口。



 类似资料:
  • 本文向大家介绍在React.js中样式化,包括了在React.js中样式化的使用技巧和注意事项,需要的朋友参考一下 React.js的样式可以通过以下两种方式完成 CSS样式表 内联样式 首先来看CSS样式表 我们有App.js文件,如下所示- 在App.js文件中,我们导入了一个包含CSS类myColoredText的App.css文件 请注意 我们在属性className的双引号中使用了CSS

  • 我们的前端样式实在是太丑了,让我们想办法来美化一下它们吧——这时候我们就需要一个前端框架来帮助我们做这件事。这里的前端框架并不是指那种MV*框架,而是UI框架。 响应式设计 考虑到易学程度,以其响应式设计的问题,我们决定用Bootstrap来作为这里的前端框架。Bootstrap是Twitter推出的一个用于前 端开发的开源工具包,似乎也是当前“最受欢迎”的前端框架。它提供了全面、美观的文档。你能

  • 我似乎无法让MediaRoute按钮在我的实体ActionBar中显示为“白色”。 我的问题是:我们如何在不更改可绘制名称的情况下,将MediaRoute按钮设置为浅色或深色? 看看这里的一个类似问题:如何更改ActionBar中MediaRouteButton的样式?公认的解决方案只是使用您自己的MediaRoute绘图集,并交换名称 对于我的应用程序,我有3种不同的风格:浅色ActionBar

  • Button组件通常由Text元素组成,该元素用TouchableHighlight(或其他touchable)包装。我正在尝试创建一个使用styled-components样式的按钮组件,但是我的样式很难动态响应道具。 下面,我创建了一个按钮组件,类似于样式化组件文档中的Adapting based on props示例。 导入后,我用的按钮是这样的... 所以,我希望我的纽扣看起来像这样...

  • 问题内容: 我想知道如何设置新标签的样式。 我只想更改背景颜色和值颜色,但找不到正确的CSS属性。对于基于Webkit的浏览器,我发现了以下这些: 在哪里可以找到基于壁虎的浏览器(Firefox),Opera和IE的正确CSS属性? 问题答案: 我在Webkit浏览器中使用以下代码对仪表进行了精细的渐变设计: 但是,CSS-Tricks的Chris Coyier 建议使用以下HTML代码: …而不

  • 本文向大家介绍如何优化打印样式?相关面试题,主要包含被问及如何优化打印样式?时的应答技巧和注意事项,需要的朋友参考一下 参考文章