From cc8c6b5ff14b76af806429376de318b7c4d08fd2 Mon Sep 17 00:00:00 2001 From: danzel Date: Thu, 13 Sep 2012 17:20:40 +1200 Subject: [PATCH] Re do the zoom animation fixes. This should fix it properly. (There was some minor visual errors when having 2 markers and doing a fast zoom out, the cluster would appear instantly instead of fading in) --- src/MarkerCluster.js | 6 +++--- src/MarkerClusterGroup.js | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/MarkerCluster.js b/src/MarkerCluster.js index 8b2896514..b83bf818b 100644 --- a/src/MarkerCluster.js +++ b/src/MarkerCluster.js @@ -131,7 +131,7 @@ L.MarkerCluster = L.Marker.extend({ }, _recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) { - this._recursively(bounds, 0, maxZoom, + this._recursively(bounds, 0, maxZoom - 1, function (c) { var markers = c._markers, i, m; @@ -168,7 +168,7 @@ L.MarkerCluster = L.Marker.extend({ //As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate if (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) { c.setOpacity(1); - c._recursivelyRemoveChildrenFromMap(bounds, previousZoomLevel - 1); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds + c._recursivelyRemoveChildrenFromMap(bounds, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds } else { c.setOpacity(0); } @@ -247,7 +247,7 @@ L.MarkerCluster = L.Marker.extend({ //exceptBounds: If set, don't remove any markers/clusters in it _recursivelyRemoveChildrenFromMap: function (previousBounds, zoomLevel, exceptBounds) { var m, i; - this._recursively(previousBounds, -1, zoomLevel, + this._recursively(previousBounds, -1, zoomLevel - 1, function (c) { //Remove markers at every level for (i = c._markers.length - 1; i >= 0; i--) { diff --git a/src/MarkerClusterGroup.js b/src/MarkerClusterGroup.js index e63fb445e..212c5ced7 100644 --- a/src/MarkerClusterGroup.js +++ b/src/MarkerClusterGroup.js @@ -487,7 +487,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ if (this._zoom < this._map._zoom) { //Zoom in, split this._animationStart(); //Remove clusters now off screen - this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, this._zoom - 1, this._getExpandedVisibleBounds()); + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, this._zoom, this._getExpandedVisibleBounds()); this._animationZoomIn(this._zoom, this._map._zoom); @@ -535,11 +535,11 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? { //Do nothing... }, _animationZoomIn: function (previousZoomLevel, newZoomLevel) { - this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, previousZoomLevel - 1); + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, previousZoomLevel); this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); }, _animationZoomOut: function (previousZoomLevel, newZoomLevel) { - this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, previousZoomLevel - 1); + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, previousZoomLevel); this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); }, _animationAddLayer: function (layer, newCluster) { @@ -617,6 +617,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? { //update the positions of the just added clusters/markers me._topClusterLevel._recursively(bounds, previousZoomLevel, 0, function (c) { L.FeatureGroup.prototype.removeLayer.call(me, c); + c.setOpacity(1); }); me._animationEnd(); @@ -633,7 +634,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? { var bounds = this._getExpandedVisibleBounds(); //Animate all of the markers in the clusters to move to their cluster center point - cluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, previousZoomLevel, newZoomLevel); + cluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, previousZoomLevel + 1, newZoomLevel); var me = this; @@ -646,7 +647,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? { setTimeout(function () { cluster._recursively(bounds, newZoomLevel, 0, function (c) { - c._recursivelyRemoveChildrenFromMap(bounds, previousZoomLevel); + c._recursivelyRemoveChildrenFromMap(bounds, previousZoomLevel + 1); }); me._animationEnd(); }, 250);