具有自定义样式字段的ACF地图

时间:2020-05-18 作者:loicdls

我有一个可以创建地图的选项页面,我创建了一个自定义字段来粘贴我自己的样式。我需要做的是在我的地图中传递这些信息。js。我所做的是创建一个这样的隐藏div(我使用的是木材):

<div class="hidden" id="map-styles">{{ options.map_styles }}</div>
然后在地图中。js我得到如下信息:

function initMap($el) {

// Find marker elements within map.
var $markers = $el.find(".marker");
var styles = document.getElementById("map-styles").textContent;

// Create generic map.
var mapArgs = {
zoom: $el.data("zoom") || 16,
mapTypeId: google.maps.MapTypeId.ROADMAP,
styles: styles,
};
但是如果我在做控制台,它就不起作用了。日志(\'styles\'),我看到了我的代码,如果我直接将代码粘贴到js文件中,它就会正常工作。你们知道怎么解决这个问题吗?如果你能让我走上正轨,我会非常感激。

您可以在此处看到地图:http://thefabulous.odns.fr/

谢谢

1 个回复
最合适的回答,由SO网友:joshmoto 整理而成

因此,我查看了您的站点,并在您的div中找到了json映射样式#map-styles.

然而,您的json并不十分有效。不确定从何处复制样式源,或者acf是否正在处理输出。

我清理了你的json样式,因此它是有效的,see validated version here.

因此,关于将其集成到maps.js, 选项style 不存在,需要修改mapTypeControlOptions 将您的风格注册为mapTypeId

See google mapTypeControlOptions docs here.

以下是我添加到您当前脚本中的内容,以使其正常工作。请注意,除非从acf字段中确保json有效,否则这不会起作用。

// map args
var mapArgs = {
  zoom: $el.data("zoom") || 16,
  mapTypeControlOptions: {
    mapTypeIds: [
      \'custom_map_style\',
      google.maps.MapTypeId.ROADMAP,
      google.maps.MapTypeId.SATELLITE
    ],
    style: google.maps.MapTypeControlStyle.HORIZONTAL
  }
};

// set our map
var map = new google.maps.Map($el[0], mapArgs);

// get our json from #map-sytles div
var customStyle = JSON.parse($(\'#map-styles\').text());

// create the custom styled map type object
var customStyleMap = new google.maps.StyledMapType(customStyle, {
  name: \'Custom Style\'
});

// set the custom styled map type against the map
map.mapTypes.set(\'custom_map_style\', customStyleMap);
map.setMapTypeId(\'custom_map_style\');
您会注意到,我在中添加了自定义样式贴图作为另一个选项mapTypeIds.

您可以删除默认值google.maps.MapTypeId.ROADMAPgoogle.maps.MapTypeId.SATELLITE 或者两者都有。。。从…起mapTypeIds. 在我看来,保留卫星选项总是很好的。


这里是一个JSFIDLE上的工作演示,使用您的站点代码和上述tweek。

https://jsfiddle.net/joshmoto/qcL7v9p6/


更简洁的方法是将json输出到数据属性中,而不是输出到隐藏的div中。

<div class="acf-map" data-zoom="19" data-style="{{ options.map_styles }}">
以这种方式获取json$el.data(\'style\');

希望这能让你走上正轨。

相关推荐