IgrDataChart では、マウス位置にあるデータポイントに対応するツールチップを表示する機能が備わっています。この機能を有効にするには、シリーズの showDefaultTooltip プロパティに true を設定します。
ただし、デスクトップデバイスなどの、マウスカーソルでの操作が前提となる環境では、マウスホバーに応じてツールチップが表示されるのですが、タッチデバイスではマウスカーソル(マウス操作)の概念がないため、IgrDataChart をロングタップ(タッチアンドホールド)することでツールチップを表示します。
ただし、ユーザーの利用環境によっては、ロングタップよりも、タッチでツールチップを表示したい局面もあります。そのような場合、回避策として、CalloutLayer を組み合わせる方法があります。なお、この回避策では、デスクトップデバイスにおいても、タッチデバイスと同様に、データポイントのクリックでツールチップを表示することができます。
実装のポイントとしては、seriesMouseLeftButtonDown イベントを捕捉し、クリックされたデータポイントの情報を CalloutLayer に登録するところです。実装コードは下記のとおりです。
import React, { useState } from "react";
import "./App.css";
import {
IgrCalloutLayer,
IgrDataChartAnnotationModule,
IgrDataChartInteractivityModule,
IgrDataChartMouseButtonEventArgs,
IgrNumericYAxis,
} from "igniteui-react-charts";
import { IgrCategoryXAxis } from "igniteui-react-charts";
import { IgrLineSeries } from "igniteui-react-charts";
import { IgrDataChart } from "igniteui-react-charts";
import { IgrDataChartCoreModule } from "igniteui-react-charts";
import { IgrDataChartCategoryModule } from "igniteui-react-charts";
IgrDataChartCoreModule.register();
IgrDataChartCategoryModule.register();
IgrDataChartInteractivityModule.register();
IgrDataChartAnnotationModule.register();
function App() {
const [useCallout, setUseCallout] = useState([{}]);
const onSeriesLeftButtonDown = (
s: any,
e: IgrDataChartMouseButtonEventArgs
) => {
const chart = e.chart as IgrDataChart;
const dataSource = chart.dataSource as [];
const dataSourceIndex = dataSource.findIndex((elem) => elem === e.item);
const callout = dataSource[dataSourceIndex] as any;
if (callout === undefined || callout.Population === undefined) {
return;
}
// クリックもしくはタップされたデータポイントの情報を、コールアウトレイヤーに登録する。
setUseCallout([{ Index: dataSourceIndex, Value: callout.Population }]);
};
const data = [
{ Year: "1920", Population: 5596 },
{ Year: "1930", Population: 6445 },
{ Year: "1940", Population: 7311 },
{ Year: "1950", Population: 8411 },
{ Year: "1960", Population: 9430 },
{ Year: "1970", Population: 10461 },
{ Year: "1980", Population: 11706 },
{ Year: "1990", Population: 12367 },
{ Year: "2000", Population: 12693 },
{ Year: "2010", Population: 12802 },
];
return (
<div className="App">
<IgrDataChart
dataSource={data}
width="500px"
height="300px"
seriesMouseLeftButtonDown={onSeriesLeftButtonDown}
>
{/* 軸 */}
<IgrCategoryXAxis name="xAxis" label="Year" />
<IgrNumericYAxis name="yAxis" minimumValue="0" />
{/* シリーズ */}
<IgrLineSeries
name="series1"
xAxisName="xAxis"
yAxisName="yAxis"
valueMemberPath="Population"
// showDefaultTooltip={true} //デフォルトのツールチップ表示機能
/>
<IgrCalloutLayer
name="series2"
dataSource={useCallout}
xMemberPath="Index"
yMemberPath="Value"
labelMemberPath="Value"
// ...
></IgrCalloutLayer>
</IgrDataChart>
</div>
);
}
export default App;
