Skip to content

Commit a46172d

Browse files
authored
Fix #233: onPan function is called multiple times (#250)
1 parent 4d1d2e8 commit a46172d

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ plugins: {
3434
// Panning directions. Remove the appropriate direction to disable
3535
// Eg. 'y' would only allow panning in the y direction
3636
mode: 'xy',
37+
3738
rangeMin: {
3839
// Format of min pan range depends on scale type
3940
x: null,
@@ -44,9 +45,11 @@ plugins: {
4445
x: null,
4546
y: null
4647
},
48+
49+
// Function called while the user is panning
50+
onPan: function({chart}) { console.log(`I'm panning!!!`); }
4751
// Function called once panning is completed
48-
// Useful for dynamic data loading
49-
onPan: function({chart}) { console.log(`I was panned!!!`); }
52+
onPanComplete: function({chart}) { console.log(`I was panned!!!`); }
5053
},
5154

5255
// Container for zoom options
@@ -83,9 +86,10 @@ plugins: {
8386
// (percentage of zoom on a wheel event)
8487
speed: 0.1,
8588

89+
// Function called while the user is zooming
90+
onZoom: function({chart}) { console.log(`I'm zooming!!!`); }
8691
// Function called once zooming is completed
87-
// Useful for dynamic data loading
88-
onZoom: function({chart}) { console.log(`I was zoomed!!!`); }
92+
onZoomComplete: function({chart}) { console.log(`I was zoomed!!!`); }
8993
}
9094
}
9195
}

src/plugin.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -455,20 +455,26 @@ var zoomPlugin = {
455455

456456
var chartArea = chartInstance.chartArea;
457457

458+
var zoomOptions = chartInstance.$zoom._options.zoom;
458459
var chartDistanceX = chartArea.right - chartArea.left;
459-
var xEnabled = directionEnabled(chartInstance.$zoom._options.zoom.mode, 'x');
460+
var xEnabled = directionEnabled(zoomOptions.mode, 'x');
460461
var zoomX = xEnabled && dragDistanceX ? 1 + ((chartDistanceX - dragDistanceX) / chartDistanceX) : 1;
461462

462463
var chartDistanceY = chartArea.bottom - chartArea.top;
463-
var yEnabled = directionEnabled(chartInstance.$zoom._options.zoom.mode, 'y');
464+
var yEnabled = directionEnabled(zoomOptions.mode, 'y');
464465
var zoomY = yEnabled && dragDistanceY ? 1 + ((chartDistanceY - dragDistanceY) / chartDistanceY) : 1;
465466

466467
doZoom(chartInstance, zoomX, zoomY, {
467468
x: (startX - chartArea.left) / (1 - dragDistanceX / chartDistanceX) + chartArea.left,
468469
y: (startY - chartArea.top) / (1 - dragDistanceY / chartDistanceY) + chartArea.top
469470
});
471+
472+
if (typeof zoomOptions.onZoomComplete === 'function') {
473+
zoomOptions.onZoomComplete({chart: chartInstance});
474+
}
470475
};
471476

477+
var _scrollTimeout = null;
472478
chartInstance.$zoom._wheelHandler = function(event) {
473479
var rect = event.target.getBoundingClientRect();
474480
var offsetX = event.clientX - rect.left;
@@ -479,13 +485,21 @@ var zoomPlugin = {
479485
y: offsetY
480486
};
481487

482-
var speedPercent = chartInstance.$zoom._options.zoom.speed;
488+
var zoomOptions = chartInstance.$zoom._options.zoom;
489+
var speedPercent = zoomOptions.speed;
483490

484491
if (event.deltaY >= 0) {
485492
speedPercent = -speedPercent;
486493
}
487494
doZoom(chartInstance, 1 + speedPercent, 1 + speedPercent, center);
488495

496+
clearTimeout(_scrollTimeout);
497+
_scrollTimeout = setTimeout(function() {
498+
if (typeof zoomOptions.onZoomComplete === 'function') {
499+
zoomOptions.onZoomComplete({chart: chartInstance});
500+
}
501+
}, 250);
502+
489503
// Prevent the event from triggering the default behavior (eg. Content scrolling).
490504
if (event.cancelable) {
491505
event.preventDefault();
@@ -569,6 +583,11 @@ var zoomPlugin = {
569583
setTimeout(function() {
570584
panning = false;
571585
}, 500);
586+
587+
var panOptions = chartInstance.$zoom._options.pan;
588+
if (typeof panOptions.onPanComplete === 'function') {
589+
panOptions.onPanComplete({chart: chartInstance});
590+
}
572591
});
573592

574593
chartInstance.$zoom._ghostClickHandler = function(e) {

0 commit comments

Comments
 (0)