, важно отметить, что .destroy() или .clear() методы DonT подходят мои потребности!
Я думаю, что здесь что-то не так происходит. Основная проблема здесь заключается в том, что вы не уничтожаете созданную вами диаграмму, то есть testChart
. Простое удаление узла не полностью очищает его.
Chart.js внутренне хранит все экземпляры созданных диаграмм. Когда вы изменяете размер окна, Chart.js проходит через этот список, на котором выполняется изменение размера для каждого экземпляра. В вашем коде выше, это ошибка, потому что первый экземпляр больше не находится в DOM, и изменение размера никогда не срабатывает для второго экземпляра. testChart2
Я бы настоятельно предложил вам оценить, почему вы не можете сделать .destroy()
(это просто удаляет экземпляр из внутреннего списка Chart.js) перед выполнением .remove()
.
Однако, если есть какая-то причина вы не можете назвать .destroy()
, вы можете сделать одно из ниже
Варианта 1
Написать свое собственное окно изменения размера обработчика, который вызывает изменение размеров за исключением случаев, диаграммы, которые вы хотите, как так
Chart.helpers.addEvent(window, "resize", (function() {
var timeout;
return function() {
clearTimeout(timeout);
timeout = setTimeout(function() {
myLineChart1.resize(myLineChart1.render, true);
}, 50);
};
})());
Вариант 2
Перепишите getMaximumWidth
функцию в библиотеке Chart.js добавить попробовать поймать блок, например, так (просто поиск по первой линии, чтобы найти блок)
getMaximumWidth = helpers.getMaximumWidth = function (domNode) {
try {
var container = domNode.parentNode;
// TODO = check cross browser stuff with this.
return container.clientWidth;
}
catch (err)
{}
},
Вариант 3
Снимите реагирующий вариант для диаграммы перед удалением его узел, например, так
myLineChart.options.responsive = false;
$("#testLine").remove();
Хотя это не удаляет ненужную ссылку из внутреннего списка Chart.js, это предотвращает запуск Chart.js (ненужной) ошибки, вызывающей изменение размера для экземпляра, который не существует в DOM.
Вот Вариант 3 в действии
Fiddle - https://jsfiddle.net/0vfqw61q/
При изменении размера окна и перезагрузите страницу график растягивает, чтобы заполнить всю ширину содержимого. Как вы чувствуете, что он работает не так, как ожидалось? Ура! – potatopeelings
он должен реагировать при изменении размера окна по умолчанию, я не хочу перезагружать страницу :) – user1751287
, если я не удаляю и перерисовываю холст, он работает безупречно! – user1751287