@@ -49,6 +49,8 @@ function Mapbox(gd, id) {
49
49
this . traceHash = { } ;
50
50
this . layerList = [ ] ;
51
51
this . belowLookup = { } ;
52
+ this . dragging = false ;
53
+ this . wheeling = false ;
52
54
}
53
55
54
56
var proto = Mapbox . prototype ;
@@ -351,10 +353,12 @@ proto.updateLayout = function(fullLayout) {
351
353
var map = this . map ;
352
354
var opts = fullLayout [ this . id ] ;
353
355
354
- map . setCenter ( convertCenter ( opts . center ) ) ;
355
- map . setZoom ( opts . zoom ) ;
356
- map . setBearing ( opts . bearing ) ;
357
- map . setPitch ( opts . pitch ) ;
356
+ if ( ! this . dragging && ! this . wheeling ) {
357
+ map . setCenter ( convertCenter ( opts . center ) ) ;
358
+ map . setZoom ( opts . zoom ) ;
359
+ map . setBearing ( opts . bearing ) ;
360
+ map . setPitch ( opts . pitch ) ;
361
+ }
358
362
359
363
this . updateLayers ( fullLayout ) ;
360
364
this . updateFramework ( fullLayout ) ;
@@ -435,8 +439,6 @@ proto.initFx = function(calcData, fullLayout) {
435
439
var gd = self . gd ;
436
440
var map = self . map ;
437
441
438
- var wheeling = false ;
439
-
440
442
// keep track of pan / zoom in user layout and emit relayout event
441
443
map . on ( 'moveend' , function ( evt ) {
442
444
if ( ! self . map ) return ;
@@ -451,7 +453,7 @@ proto.initFx = function(calcData, fullLayout) {
451
453
// mouse target (filtering out API calls) to not
452
454
// duplicate 'plotly_relayout' events.
453
455
454
- if ( evt . originalEvent || wheeling ) {
456
+ if ( evt . originalEvent || self . wheeling ) {
455
457
var optsNow = fullLayoutNow [ self . id ] ;
456
458
Registry . call ( '_storeDirectGUIEdit' , gd . layout , fullLayoutNow . _preGUI , self . getViewEdits ( optsNow ) ) ;
457
459
@@ -460,18 +462,21 @@ proto.initFx = function(calcData, fullLayout) {
460
462
optsNow . _input . zoom = optsNow . zoom = viewNow . zoom ;
461
463
optsNow . _input . bearing = optsNow . bearing = viewNow . bearing ;
462
464
optsNow . _input . pitch = optsNow . pitch = viewNow . pitch ;
463
-
464
465
gd . emit ( 'plotly_relayout' , self . getViewEditsWithDerived ( viewNow ) ) ;
465
466
}
466
- wheeling = false ;
467
+ if ( evt . originalEvent && evt . originalEvent . type === 'mouseup' ) {
468
+ self . dragging = false ;
469
+ } else if ( self . wheeling ) {
470
+ self . wheeling = false ;
471
+ }
467
472
468
473
if ( fullLayoutNow . _rehover ) {
469
474
fullLayoutNow . _rehover ( ) ;
470
475
}
471
476
} ) ;
472
477
473
478
map . on ( 'wheel' , function ( ) {
474
- wheeling = true ;
479
+ self . wheeling = true ;
475
480
} ) ;
476
481
477
482
map . on ( 'mousemove' , function ( evt ) {
@@ -500,7 +505,10 @@ proto.initFx = function(calcData, fullLayout) {
500
505
Fx . loneUnhover ( fullLayout . _hoverlayer ) ;
501
506
}
502
507
503
- map . on ( 'dragstart' , unhover ) ;
508
+ map . on ( 'dragstart' , function ( ) {
509
+ self . dragging = true ;
510
+ unhover ( ) ;
511
+ } ) ;
504
512
map . on ( 'zoomstart' , unhover ) ;
505
513
506
514
map . on ( 'mouseout' , function ( ) {
0 commit comments