问:如何使用Zone.js拦截GoogleMap的requestAnimationFrame

时间:2018-02-21 09:45:15

标签: google-maps zone.js

编辑:我正在使用Zone v0.8.20

背景:Google地图会在缩小地图时触发requestAnimationFrame,在平移时,我想通过Zone.js截取这些requestAnimationFrame以对其进行去抖,并可能会提高移动设备的性能。

我有以下简单的repro代码:

<!DOCTYPE html>
<html>
  <head>
    ...
    <script src="node_modules/zone.js/dist/zone.js"></script>
  </head>

  <body>
    <div id="map"></div>
    <script>
      var map;

      var mapZone = Zone.current.fork({
          name: "GMAPS",
          onScheduleTask: (delegate, current, target, task) => {
                console.log(task);
                console.log(Zone.current.name)
                return delegate.scheduleTask(target, task);
            },
            onHasTask: (delegate, current, target, task) => {
                console.log(task)
            }
      })
      function initMap() {
        mapZone.run(() => {
            map = new google.maps.Map(document.getElementById('map'), {
            center: {lat: -34.397, lng: 150.644},
            zoom: 8
            });

            var marker = new google.maps.Marker({
            position: {lat: -34.100, lng: 150.644},
            map: map,
            title: 'Hello World!'
            });
        });
      }
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=initMap&sensor=true"
    async defer></script>
  </body>
</html>

这里的问题是我似乎无法拦截ZoneSpec上定义的requestAnimationFrame方法上的onScheduleTask ...正如您在代码中看到的那样,我运行了Google的实例化分叉区域内的地图名为mapZone

我是Zone.js的新手,这可能是一个简单的问题,但我似乎找不到解决方案......你觉得我在这里错过了什么?

提前非常感谢!

1 个答案:

答案 0 :(得分:-1)

由于谷歌地图是在根区域中加载而无法正常工作的原因,并且在当前版本的zone.js中,无法配置根区域规范。

我已经通过monkey-patch zone.js创建了一个关于这个的配置根区域。你可以在下面的链接找到工作样本。

https://github.com/JiaLiPassion/customize-root-zone