Chart.js: 如何监听hover/click 小区外的事件?
Chart.js: how to listen to hover/click events outside of plot area?
如何创建一个条形图来侦听绘图区域外的悬停和单击事件?
简单演示:
const ctx = document.getElementById('myChart').getContext('2d');
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
}]
},
options: {
onHover: () => console.log("hover"),
onClick: () => console.log("click"),
}
});
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.6.0/dist/chart.min.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
如上面的演示所示,当事件发生在绘图区域之外时,悬停和点击回调不会被触发,例如单击轴刻度标签时。
您可以使用 afterEvent
挂钩编写自定义插件,以捕获所有事件。在这里您可以过滤掉您想要的事件,例如 mousemove
、mouseout
、click
或通过与 canvas.
交互引发的任何其他事件
const options = {
type: 'line',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
borderColor: 'pink'
},
{
label: '# of Points',
data: [7, 11, 5, 8, 3, 7],
borderColor: 'orange'
}
]
},
options: {},
plugins: [{
id: 'customEventListner',
afterEvent: (chart, evt, opts) => {
console.log(evt.event.type, evt.event.x, evt.event.y)
}
}]
}
const ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
<canvas id="chartJSContainer" width="600" height="400"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.6.0/chart.js"></script>
</body>
如何创建一个条形图来侦听绘图区域外的悬停和单击事件?
简单演示:
const ctx = document.getElementById('myChart').getContext('2d');
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
}]
},
options: {
onHover: () => console.log("hover"),
onClick: () => console.log("click"),
}
});
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.6.0/dist/chart.min.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
如上面的演示所示,当事件发生在绘图区域之外时,悬停和点击回调不会被触发,例如单击轴刻度标签时。
您可以使用 afterEvent
挂钩编写自定义插件,以捕获所有事件。在这里您可以过滤掉您想要的事件,例如 mousemove
、mouseout
、click
或通过与 canvas.
const options = {
type: 'line',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
borderColor: 'pink'
},
{
label: '# of Points',
data: [7, 11, 5, 8, 3, 7],
borderColor: 'orange'
}
]
},
options: {},
plugins: [{
id: 'customEventListner',
afterEvent: (chart, evt, opts) => {
console.log(evt.event.type, evt.event.x, evt.event.y)
}
}]
}
const ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
<canvas id="chartJSContainer" width="600" height="400"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.6.0/chart.js"></script>
</body>