Fix tooltip animation when target changes while animating (#5005)

* Fix issue #4989
 - tooltip in 'index' mode doesn't animate smoothly.

* Change: different approach for smooth tooltip animation in 'index'
        mode, when target doesn't change.

* Fix: jslint error

* Fix: remove spyOn pivot from test

* Add: setAnimating-flag in transition used to set on tooltip.transition
     to keep track of tooltip animation.

* Decrease code complexity

* Revert transition and complexity changes
Add: use 'tooltip._start' as workaround check for tooltip animation status
This commit is contained in:
jcopperfield 2017-12-13 00:43:17 +01:00 committed by Evert Timberg
parent 6f34b2224f
commit 4e47c178e4
2 changed files with 20 additions and 18 deletions

View File

@ -849,7 +849,15 @@ module.exports = function(Chart) {
me._bufferedRequest = null;
var changed = me.handleEvent(e);
changed |= tooltip && tooltip.handleEvent(e);
// for smooth tooltip animations issue #4989
// the tooltip should be the source of change
// Animation check workaround:
// tooltip._start will be null when tooltip isn't animating
if (tooltip) {
changed = tooltip._start
? tooltip.handleEvent(e)
: changed | tooltip.handleEvent(e);
}
plugins.notify(me, 'afterEvent', [e]);

View File

@ -852,25 +852,19 @@ module.exports = function(Chart) {
// Remember Last Actives
changed = !helpers.arrayEquals(me._active, me._lastActive);
// If tooltip didn't change, do not handle the target event
if (!changed) {
return false;
}
// Only handle target event on tooltip change
if (changed) {
me._lastActive = me._active;
me._lastActive = me._active;
if (options.enabled || options.custom) {
me._eventPosition = {
x: e.x,
y: e.y
};
if (options.enabled || options.custom) {
me._eventPosition = {
x: e.x,
y: e.y
};
var model = me._model;
me.update(true);
me.pivot();
// See if our tooltip position changed
changed |= (model.x !== me._model.x) || (model.y !== me._model.y);
me.update(true);
me.pivot();
}
}
return changed;