From e792ca6727d297a2f3a21dd84dfd8af714593402 Mon Sep 17 00:00:00 2001 From: Connum Date: Fri, 24 Feb 2017 14:09:39 +0100 Subject: [PATCH] some minor performance improvement (prevents flickering): do not redraw if neither bounding box nor zoom level has changed on idle or zoom_changed (for example, if zooming out beyond a specific zoom level has been disabled on the map) --- src/datalayerclusterer.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/datalayerclusterer.js b/src/datalayerclusterer.js index 8ae0da6..432d758 100755 --- a/src/datalayerclusterer.js +++ b/src/datalayerclusterer.js @@ -99,6 +99,7 @@ function DataLayerClusterer (optOptions) { this.averageCenter_ = options.averageCenter !== undefined ? options.averageCenter : true; this._dataLayer = new google.maps.Data(); this.firstIdle_ = true; + this.prevBounds_ = null; this.recolorSVG_ = typeof options.recolorSVG !== "undefined" && (typeof options.recolorSVG === "string" || options.recolorSVG instanceof String || options.recolorSVG === false) ? options.recolorSVG : 'g:first-child'; this.baseSVG_ = null; @@ -231,6 +232,10 @@ DataLayerClusterer.prototype.redraw = function () { oldClusters[i].remove(); } }); + + if (this.map_) { + this.prevBounds_ = this.map_.getBounds(); + } }; @@ -594,16 +599,17 @@ DataLayerClusterer.prototype.onAdd = function () { // Add the map event listeners var self = this; this._zoomchanged = google.maps.event.addListener(this.map_, 'zoom_changed', function () { - var zoom = self.map_.getZoom(); - - if (self.prevZoom_ !== zoom) { + var zoom = self.map_.getZoom(), + nothingChanged = (self.prevBounds_ && self.prevBounds_.equals(self.map_.getBounds())); + if (self.prevZoom_ !== zoom && nothingChanged !== true) { self.prevZoom_ = zoom; self.resetViewport(); } }); this._idle = google.maps.event.addListener(this.map_, 'idle', function () { - if (!self.firstIdle_) { + var nothingChanged = (self.map_ && self.prevZoom_ && self.prevZoom_ === self.map_.getZoom() && self.prevBounds_ && self.prevBounds_.equals(self.map_.getBounds())); + if (!self.firstIdle_ && nothingChanged !== true) { self.redraw(); } self.firstIdle_ = false;