Недавно я столкнулся с подобной проблемой и нашел решение, которое также применимо к вашей проблеме. У меня был шаг LineChart, и я хотел отобразить подсказку о данных, когда пользователь завис в любом месте строки, а не только в определенных точках данных.
Вы можете прочитать о решении, которое я написал для этой проблемы, здесь: Flex: Настройка расположения и поведения подсказки данных в LineChart
Вам придется немного изменить мое решение, чтобы соответствовать вашей проблеме:
В строке 47 вы можете удалить проверку Math.abs(last.y - mouseLoc.y) < 50
. Это ограничивает подсказки данных линиями, которые находятся в пределах 50 пикселей по вертикали от мыши.
Я предполагаю, что вы используете линейный график по умолчанию , который просто рисует линии непосредственно между точками данных. Вам нужно будет изменить код, который вычисляет значение строки по заданной x-координате, чтобы работать с этим типом диаграммы. Я уже нахожу ближайшую точку данных слева от мыши со строками 33-41 и сохраняю ее в last
. Просто получите следующую точку данных (которая будет ближайшей к правой мыши) и используйте что-то вроде этого, чтобы получить значение у мыши:
var slope:Number = (nextPoint.y - last.y) / (nextPoint.x - last.x);
var lineYAtMouse:Number = (slope * (last.x - mouseLoc.x)) + last.y;
var lineValue:Array = line.localToData(new Point(mouseLoc.x, lineYAtMouse));
Затем замените строки с 69 по 72 на:
hitPoint.x = mouseLoc.x;
hitPoint.y = lineYAtMouse;
hitPoint.xValue = lineValue[0];
hitPoint.yValue = lineValue[1];
Я не тестировал эти модификации, поэтому может быть ошибка или 2, но общая идея есть. Надеюсь, может быть, это еще кому-нибудь пригодится. Этот вопрос стареет. :)