Я реализовал диаграмму js для построения двух кривых, обозначенных красной и синей линиями. Я хочу добавить ползунок (черную вертикальную линию), чтобы он всегда оставался в пределах двух кривых, и пользователь мог перемещать его влево и вправо от графика. когда пользователи сдвигают его влево или вправо, он сам регулирует высоту. Таким образом, взяв значения x и y нижнего графика и установив высоту путем вычитания y1 первого графика и y2 второго графика, он ведет себя так, как ожидалось. Вот мой код:
Он запускается и достигает своих целей, но с ошибкой, вызванной этой строкой
'draggableElement.style. высота = ${newHeight}px;' , что понятно, поскольку оно не было определено нигде в коде, поэтому, когда я удаляю линию, ползунок черной линии появляется поверх графика за пределами двух графиков. Но только сохраняя его, график ведет себя так, как ожидалось, и когда перетаскиваемая черная линия появляется внутри двух графиков. поэтому, хотя я получаю результаты так, как хочу, но не могу понять, почему удаляю приведенную выше строку, моя диаграмма не работает должным образом.
Я реализовал диаграмму js для построения двух кривых, обозначенных красной и синей линиями. Я хочу добавить ползунок (черную вертикальную линию), чтобы он всегда оставался в пределах двух кривых, и пользователь мог перемещать его влево и вправо от графика. когда пользователи сдвигают его влево или вправо, он сам регулирует высоту. Таким образом, взяв значения x и y нижнего графика и установив высоту путем вычитания y1 первого графика и y2 второго графика, он ведет себя так, как ожидалось. Вот мой код:
// Update the tooltip with the current x, p, and s values const tooltip = document.getElementById('tooltip'); tooltip.innerHTML = `X: ${xValue.toFixed(2)} P: ${pYValue ? pYValue.toFixed(2) : 'N/A'} S: ${sYValue ? sYValue.toFixed(2) : 'N/A'} Difference: ${difference ? difference.toFixed(2) : 'N/A'}`; tooltip.style.display = 'block'; tooltip.style.left = `${xPos + chartLeft + 10}px`; tooltip.style.top = `${rect.top + 10}px`;
const xPixelPos = myChart.scales.x.getPixelForValue(xValue); // Get pixel for xValue const yPixelPos = myChart.scales.y.getPixelForValue(pYValue); // Get pixel for sYValue
const y1PixelPos = myChart.scales.y.getPixelForValue(sYValue); // Get pixel for sYValue
const height = Math.abs(yPixelPos - y1PixelPos);
const blackLine = document.getElementById('draggable'); blackLine.style.left = `${xPixelPos}px`; // Set the x position of the div blackLine.style.top = `${yPixelPos}px`; blackLine.style.height = `${height}px`;
draggableElement.style.height = `${newHeight}px`; // Set height
} }); });
// Helper function to find Y value for a given X in the dataset function getYValueAtX(x, data) { // Find the nearest point in the data for the given x const point = data.find(p => p.x >= x); return point ? point.y : null; }
function interpolateData(data) { // Create arrays to store the new interpolated p and s values let interpolatedData = [];
for (let i = 0; i < data.length; i++) { const currentPoint = data[i]; const nextPoint = data[i + 1];
// Check if "p" or "s" is missing and interpolate if necessary if (currentPoint.p === "" && nextPoint) { // Linear interpolation for 'p' const prevPoint = data[i - 1]; if (prevPoint && nextPoint.p !== "") { currentPoint.p = prevPoint.p + ((nextPoint.x - prevPoint.x) * (nextPoint.p - prevPoint.p)) / (nextPoint.x - prevPoint.x); } }
Он запускается и достигает своих целей, но с ошибкой, вызванной этой строкой 'draggableElement.style. высота = ${newHeight}px;' , что понятно, поскольку оно не было определено нигде в коде, поэтому, когда я удаляю линию, ползунок черной линии появляется поверх графика за пределами двух графиков. Но только сохраняя его, график ведет себя так, как ожидалось, и когда перетаскиваемая черная линия появляется внутри двух графиков. поэтому, хотя я получаю результаты так, как хочу, но не могу понять, почему удаляю приведенную выше строку, моя диаграмма не работает должным образом.