Skip to content

Commit

Permalink
some minor performance improvement (prevents flickering): do not redr…
Browse files Browse the repository at this point in the history
…aw 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)
  • Loading branch information
Connum committed Feb 24, 2017
1 parent 8884026 commit e792ca6
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions src/datalayerclusterer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -231,6 +232,10 @@ DataLayerClusterer.prototype.redraw = function () {
oldClusters[i].remove();
}
});

if (this.map_) {
this.prevBounds_ = this.map_.getBounds();
}
};


Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit e792ca6

Please sign in to comment.