Я пытаюсь использовать chart.js для создания гистограммы с пользовательской подсказкой html.Я хотел бы включить некоторые интерактивные вещи в подсказку.Проблема в том, что по умолчанию, когда мышь покидает холст диаграммы, непрозрачность всплывающей подсказки становится равной 0. Мне нужно переопределить событие mouseout, чтобы пользователи могли взаимодействовать с подсказкой.
Официальная документацияхорошо, но не исчерпывающе ... Я не могу найти официальный ответ, поэтому я прибег к рассмотрению открытого исходного кода и моих инструментов разработчика.
Используя инструменты разработчика Google Chrome, я могу нажать на холст и посмотретьна вкладке слушателей событий.Под mouseout я вижу следующее:
canvas#chart_0.dashboard-chart.chartjs-render-monitor chart.js 10969
удаление этого слушателя в инструментах разработчика решает проблему.когда я нажимаю на ссылку, я вижу следующий код, который используется для добавления прослушивателя, и если я устанавливаю точку останова, я вижу, как она добавляется:
...
addEventListener: function(chart, type, listener) {
var canvas = chart.canvas;
if (type === 'resize') {
// Note: the resize event is not supported on all browsers.
addResizeListener(canvas, listener, chart);
return;
}
var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});
var proxies = expando.proxies || (expando.proxies = {});
var proxy = proxies[chart.id + '_' + type] = function(event) {
listener(fromNativeEvent(event, chart));
};
addEventListener(canvas, type, proxy);
},
...
При наведении файла chart.js из CDNи предпочел бы переопределить это с помощью моего собственного javascript, а не использовать индивидуальную версию chart.js.Я не могу понять, как удалить обработчик, хотя.Я пробовал следующее после загрузки скрипта chart.js:
$('canvas').off('mouseout');
$('canvas#chart_0').off('mouseout');
$('canvas#chart_0.dashboard-chart.chartjs-render-monitor').off('mouseout');
$('#chart_0').off('mouseout');
$('.chartjs-render-monitor').off('mouseout');
Ни один из этих селекторов не удаляет прослушиватель событий.Я также пробовал что-то с эффектом $('canvas#chart_0')[0].removeEventListener('mouseout')
, но для этого требуется прослушиватель в качестве параметра, и я не уверен, как получить ссылку на него, поскольку он передается анонимно.Кто-нибудь может порекомендовать способ избавления от прослушивателя событий по умолчанию или способ передачи параметра конфигурации в chart.js для переопределения поведения по умолчанию?Заранее спасибо.