javascript - 是否可以将动画 svg 分配给 google Maps JavaScript API 中的标记符号?

标签 javascript google-maps animation svg google-maps-api-3

我使用 SVG 创建了一个符号。这是我的符号:

    var symbol = {
    anchor: new google.maps.Point(11, 11),
    url: 'data: image/svg+xml;utf-8, ' + mysvg,
    size : new google.maps.Size(22, 22)
}

我已将它分配给一个标记:

marker.setIcon(symbol);

我的 svg 如下:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 
<g fill="none" stroke-width="3" transform="translate(11,11)">
<circle id="my-circle" cx="0" cy="0" r="9" stroke="darkorange" fill="seagreen" />
 </g> </svg>

它工作得很好,但在某些情况下我需要为标记设置动画,因此我创建了以下动画 svg 以将其分配给我的标记:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 
<g fill="none" stroke-width="3" transform="translate(11,11)">
<circle id="my-circle" cx="0" cy="0" r="9" stroke="darkorange" fill="seagreen" />
<animate href="#my-circle" attributeName="opacity"  values="1;-2" dur="1s" repeatCount="indefinite" /> </g> </svg>

我用与以前相同的方式创建了一个新符号:

var animatedsymbol = {
    anchor: new google.maps.Point(11, 11),
    url: 'data: image/svg+xml;utf-8, ' + myanimatesvg,
    size : new google.maps.Size(22, 22)
}

我将它分配给标记:

marker.setIcon(animatedsymbol);

但是它不起作用,标记没有显示。我怀疑谷歌地图 api 标记不支持这种动画 svgs。有谁知道它是否支持动画 svgs?如果确实如此,您是否有任何迹象表明我做错了什么?

提前谢谢您。

最佳答案

我认为这样做是没有问题的。检查此代码:

var svgNonAnimated = btoa([
  '<?xml version="1.0"?>',
  '<svg viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg">',
  '<g fill="none" stroke-width="3" transform="translate(11,11)">',
  '<circle id="my-circle" cx="0" cy="0" r="9" stroke="darkorange" fill="seagreen" />',
  '</g></svg>'
].join('\n'));

var svgAnimated = btoa([
  '<?xml version="1.0"?>',
  '<svg viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg">',
  '<g fill="none" stroke-width="3" transform="translate(11,11)">',
  '<circle id="my-circle" cx="0" cy="0" r="9" stroke="darkorange" fill="seagreen" />',
  '<animate href="#my-circle" attributeName="opacity"  values="1;-2" dur="1s" repeatCount="indefinite" />',
  '</g></svg>'
].join('\n'));


function initMap() {
  var center = new google.maps.LatLng(33.53625, -111.92674);

  var map = new google.maps.Map(document.getElementById('map'), {
    center: center,
    zoom: 13
  });

  var marker = new google.maps.Marker({
    position: center,
    map: map,
    title: 'Dynamic SVG Marker',
    icon: getIcon(false),
    optimized: false
  });

  var isAnimated = false;
  document.getElementById('toggleAnimation').addEventListener('click', function() {
    isAnimated = !isAnimated;
    marker.setIcon(getIcon(isAnimated));
  });

  function getIcon(animated) {
    return animated ? {
      url: 'data:image/svg+xml;charset=UTF-8;base64,' + svgAnimated,
      scaledSize: new google.maps.Size(50, 50)
    } : {
      url: 'data:image/svg+xml;charset=UTF-8;base64,' + svgNonAnimated,
      scaledSize: new google.maps.Size(50, 50)
    };
  }

}
.as-console-wrapper{
  display:none !important;
}
<script async defer type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false&callback=initMap"></script>

<div id="map" style="width:400px;height:150px;float:left"></div>
<button id="toggleAnimation" style="float: left;width: 70px;text-align: center;font-size: 11px;">Toggle Animate</button>

这适用于 Chrome 和 Firefox,但在 IE11 中我只能看到 svg 而没有动画......

关于javascript - 是否可以将动画 svg 分配给 google Maps JavaScript API 中的标记符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45481694/

相关文章:

php - 将 JSON 数组发送到 MySQL

android - 如何在 Android 中顺利平移 GoogleMap?

java - Android 版 Google map API,更快/更有效地检索基于位置的信息?

html - css 卡片翻转动画后无法交互

javascript - 使用 Javascript 和 CSS 在事件触发时制作动画

javascript - 通过书签触发 Markdown 处理

javascript - 如何在 Here Maps 中创建多个信息气泡

html - CSS 动画延迟

javascript - 手动加载JQuery而不触发内容安全策略

javascript - 将元素添加到 Uint8ClampedArray 类型数组的快速方法