Как отключить chartjs legendclick
Я бы хотел отключить legend.js легенду диаграммы паук, потому что, когда я нажимаю на легенду, серия данных скрывает связанный набор значений, как показано на приведенных ниже изображениях.
Мое требование состоит в том, что я не хочу отключать набор данных. Я попробовал preventDefault(); на графике щелкните, но он не работает.
Пример моего кода приведен ниже. Пожалуйста, проверьте..
<!doctype html>
<html>
<head>
<title>Radar Chart</title>
<script src="../dist/Chart.bundle.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>
<body>
<div style="width:75%">
<canvas id="canvas"></canvas>
</div>
<script>
var randomScalingFactor = function() {
return Math.round(Math.random() * 100);
};
var randomColorFactor = function() {
return Math.round(Math.random() * 255);
};
var randomColor = function(opacity) {
return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')';
};
var config = {
type: 'radar',
data: {
labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"],
datasets: [{
label: "My First dataset",
backgroundColor: "rgba(0,0,0,0.5)",
pointBackgroundColor: "rgba(220,220,220,1)",
data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()]
}, {
label: "My Second dataset",
backgroundColor: "rgba(0,120,0,0.5)",
pointBackgroundColor: "rgba(151,187,205,1)",
hoverPointBackgroundColor: "#fff",
pointHighlightStroke: "rgba(151,187,205,1)",
data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()]
},]
},
options: {
legend: {
position: 'top',
onClick: (e) => e.stopPropagation()
},
title: {
display: true,
text: ''
},
scale: {
reverse: false,
gridLines: {
color: ['black']
},
ticks: {
beginAtZero: true
}
}
}
};
window.onload = function() {
window.myRadar = new Chart(document.getElementById("canvas"), config);
};
</script>
</body>
</html>
Ответы
Ответ 1
Согласно документам есть обработчик onClick
для легенды, отображающей объект события. Если вы stopPropagation
это остановит stopPropagation
данных, скрывающуюся:
let chart = new Chart(elem.find('canvas')[0], {
type: 'line',
data: {
labels: [],
datasets: []
},
options: {
responsive: true,
maintainAspectRatio: false,
legend: {
onClick: (e) => e.stopPropagation()
}
}
});
Вышеупомянутый ES6, если вы не используете поддерживаемый браузер ниже, это более старый ES5 equivilant.
legend: {
onClick: function (e) {
e.stopPropagation();
}
}
Chartjs должен зарегистрировать свое собственное событие click после legend.onClick
поэтому это прекращает его выполнение.
документы
Ответ 2
Чтобы переопределить поведение по умолчанию щелчка по элементу легенды, который показывает/скрывает связанный набор данных на диаграмме, вы можете использовать следующую опцию (для ясности показана внутри options
):
options: {
legend: {
onClick: function(event, legendItem) {}
}
}
Это способ переопределить поведение по умолчанию, то есть путем предоставления функции с теми же аргументами. Согласно вашим требованиям, эта функция должна иметь пустое тело (и, следовательно, возвращаться немедленно), поскольку при нажатии на элемент легенды абсолютно ничего не должно происходить. Ищите legend.onClick
в документации. Хотя в настоящее время он отображается только для двух типов диаграмм, эта опция должна работать для всех типов диаграмм.
Ответ 3
Кроме того, вы можете использовать null
или любое значение, которое оценивается как false
чтобы отключить событие click для всей легенды.
options: {
legend: {
onClick: null
}
}
Примечание. Игнорируйте событие нажатия, нажав onClick
на следующий код в Chart.js(https://github.com/chartjs/Chart.js/blob/6bea15e7cf89003e3a5945a20cf1d2cc5096728e/src/plugins/plugin.legend.js#L11)
Ответ 4
Установка selectedMode = false
отключит функциональность щелчка и наведения легенды.
options: {
legend: {
selectedMode: false
}
}
документация
Ответ 5
Вам нужно добавить свойства legendItemClick
чтобы переопределить действие по умолчанию. Это хорошо работает для круговой диаграммы
legendItemClick: function(e){
console.log("Clicked an item with text: " + e.text);
e.preventDefault();
}
https://docs.telerik.com/kendo-ui/api/javascript/dataviz/ui/chart/events/legenditemclick