Обновление всплывающей подсказки Highcharts при нажатии кнопки не работает с модулем повышения

Я использую Highcharts для рисования своих графиков с модулем повышения. У меня есть несколько рядов данных с общей подсказкой. Значения оси X одинаковы для всех рядов данных. Теперь, когда я нажимаю кнопку, я хочу показать общую всплывающую подсказку. Мой ввод - это индекс точки оси X. Вот мой код, для упрощения я использую два небольших массива данных и хочу показать всплывающую подсказку по индексу=2:

var chart=$('#container').highcharts({
    boost: {
             useGPUTranslations: true,
             seriesThreshold: 1,
           },
    series: [{
        name: 'Data1',
        data: [24.2, 24.6, 26.7, 28.6, 30.1, 29.0, 27.5, 27.2, 27.4, 28.2, 27.4, 25.6]
    }, {
        name: 'Data2',
        data: [14.1, 16.9, 22.4, 28.6, 32.8, 33.8, 31.0, 29.8, 29.2, 26.0, 20.3, 15.4]
    }],
    tooltip: {
        crosshairs: [true],
        shared: true,
    }
}).highcharts();

$('#showTooltipID').on('click', function() {
chart.tooltip.refresh([chart.series[0].points[2], chart.series[1].points[2]]);
  });

Пример с seriesThreshold: 1,http://jsfiddle.net/hu5qatjn/34/ -> не работает!

Пример с seriesThreshold: 3,http://jsfiddle.net/hu5qatjn/35/ -> работает! (модуль повышения не активен)

Так что я делаю не так с буст-модулем?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
949
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При использовании модуля boost точка не визуализируется при начальной загрузке, чтобы сэкономить некоторую производительность, поэтому ваш текущий подход не работает - объект точки не имеет достаточно данных/свойств для запуска всплывающей подсказки. Нам нужно отобразить точку программно, прежде чем она будет передана функции tooltip.refresh.

$('#showTooltipID').on('click', function() {
    const series1 = chart.series[0],
                series2 = chart.series[1],
                point1 = series1.getPoint(series1.points[2]),
                point2 = series2.getPoint(series2.points[2]);
                

  chart.tooltip.refresh([point1, point2]);
});

Демо: http://jsfiddle.net/BlackLabel/8gos3cx2/

Спасибо, я думаю, что это идет в правильном направлении, но это не на 100% то, что я ищу. Вот обновленный пример на основе вашего кода: jsfiddle.net/4gnh5rmk/13 У нас есть два массива по 10000 элементов в каждом. Я хочу показать всплывающую подсказку по индексу 50, но всплывающая подсказка отображается по индексу 661 (=значение x).

xFL 24.12.2020 14:55

@xFL, обратите внимание, что не все точки отображаются - это связано с ограничением усиления. Проверьте свой series.points.length в консоли — количество отображаемых точек зависит от ширины диаграммы. Как вы можете найти It bypasses some of the standard Highcahrts features, applies some trade-offs and focuses on handling and rendering as many data points as possible as quickly as possiblehighcharts.com/docs/advanced-chart-features/boost-module

Sebastian Wędzel 28.12.2020 09:33

поэтому единственное возможное решение с модулем повышения - это вычислить ближайший индекс, показанный на диаграмме? Примерно так: jsfiddle.net/uv8ypx6d/6 Или есть другой более приятный способ, который я упустил?

xFL 28.12.2020 10:03

Еще одна идея, которая пришла мне в голову, состоит в том, чтобы визуализировать эти конкретные точки как выдающуюся фиктивную серию — это решение гарантирует, что эти точки существуют после каждого рендеринга: jsfiddle.net/BlackLabel/anw76js1

Sebastian Wędzel 28.12.2020 12:38

Спасибо за эту дополнительную идею. Но в моем последнем сценарии я не буду показывать всплывающую подсказку только один раз при нажатии кнопки. Я наведу курсор на трек gpx на карте, а затем выделю соответствующую всплывающую подсказку. Поэтому я думаю, что всегда показывать фиктивную точку на диаграмме менее эффективно, чем просто искать ближайшую точку, уже нарисованную на диаграмме.

xFL 29.12.2020 08:51

@xFL Понятно, спасибо за информацию. Но нужно ли показывать именно эти данные или подойдет ближайшая точка?

Sebastian Wędzel 29.12.2020 10:35

Конечно, фактическая точка была бы хороша, но я не хочу снижать производительность. Так что на данный момент я могу показать ближайшую точку. Или вы думаете, что это возможно сделать производительным способом? Большое спасибо за ваши ответы :)

xFL 29.12.2020 17:42

@xFL, все мои идеи требуют добавления этих точек, а также выполнения и обновления на графике, что определенно плохо скажется на производительности, поэтому такой большой объем данных для поиска ближайшей точки будет лучшим решением.

Sebastian Wędzel 29.12.2020 17:52

Хорошо, спасибо за совет, Себастьян! Я отмечу это как ответ, потому что теперь у меня есть решение с поиском ближайшей точки.

xFL 30.12.2020 08:06

Другие вопросы по теме