Fix interaction on partially visible bar (#9446)

This commit is contained in:
Jukka Kurkela 2021-07-20 14:57:56 +03:00 committed by GitHub
parent c73add9d6c
commit ba2f158dc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 90 additions and 4 deletions

View File

@ -166,7 +166,7 @@ function getNearestItems(chart, position, axis, intersect, useFinalPosition) {
}
const center = element.getCenterPoint(useFinalPosition);
if (!_isPointInArea(center, chart.chartArea, chart._minPadding)) {
if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) {
return;
}
const distance = distanceMetric(position, center);

View File

@ -0,0 +1,42 @@
module.exports = {
config: {
type: 'bar',
data: {
labels: ['a', 'b', 'c'],
datasets: [
{
data: [220, 250, 225],
},
],
},
options: {
events: ['click'],
interaction: {
mode: 'nearest'
},
plugins: {
tooltip: true,
legend: false
},
scales: {
y: {
beginAtZero: false
}
}
}
},
options: {
spriteText: true,
canvas: {
width: 256,
height: 256
},
async run(chart) {
const point = {
x: chart.chartArea.left + chart.chartArea.width / 2,
y: chart.chartArea.top + chart.chartArea.height / 2,
};
await jasmine.triggerMouseEvent(chart, 'click', point);
}
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@ -0,0 +1,45 @@
module.exports = {
config: {
type: 'scatter',
data: {
datasets: [{
data: [{x: 1, y: 1}, {x: 48, y: 1}]
}]
},
options: {
events: ['click'],
interaction: {
mode: 'nearest',
intersect: false
},
plugins: {
tooltip: true,
legend: false
},
scales: {
x: {
min: 5,
max: 50
},
y: {
min: 0,
max: 2
}
},
layout: {
padding: 50
}
}
},
options: {
spriteText: true,
canvas: {
width: 256,
height: 256
},
async run(chart) {
const point = chart.getDatasetMeta(0).data[0];
await jasmine.triggerMouseEvent(chart, 'click', {y: point.y, x: chart.chartArea.left});
}
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -1,7 +1,6 @@
// Tests of the interaction handlers in Core.Interaction
// Test the rectangle element
describe('Core.Interaction', function() {
describe('auto', jasmine.fixture.specs('core.interaction'));
describe('point mode', function() {
beforeEach(function() {
this.chart = window.acquireChart({