Событие google charts, когда пользователь увеличивает масштаб или щелкает правой кнопкой мыши для сброса

У меня есть диаграмма Google. Я разрешил пользователю перетаскивать и масштабировать, используя опцию ниже.

 var options = {
    explorer:
        {
            keepInBounds: true,
            actions: ['dragToZoom', 'rightClickToReset']
        }

У меня также есть прослушивание ниже, которое скрывает / показывает серию при нажатии на ее легенду.

google.visualization.events.addListener(chart, 'select', showHideSeries);

Все работает нормально. Я пытаюсь выяснить, когда пользователь либо увеличил масштаб, либо щелкнул правой кнопкой мыши для сброса. Есть ли событие или способ узнать об этом?

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

function getCoords() {
var chartLayout = chart.getChartLayoutInterface();
var chartBounds = chartLayout.getChartAreaBoundingBox();
return {
    x: {
        min: chartLayout.getHAxisValue(chartBounds.left),
        max: chartLayout.getHAxisValue(chartBounds.width + chartBounds.left)
    },
    y: {
        min: chartLayout.getVAxisValue(chartBounds.top),
        max: chartLayout.getVAxisValue(chartBounds.height + chartBounds.top)
    }
};
}

Вот пример j скрипки мой пример

Обновлять

Прошу прощения. Думаю, я упустил важную часть информации. Итак, моя функция ajax получает данные с сервера, а затем вызывает функцию для рисования диаграммы.

$(document).ready(function () {

// $.ajax(...);});

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

Uncaught error: container is not defined.

Это происходит во второй строке кода ниже.

var chartDiv = document.getElementById('chartScore')

var chart = new google.visualization.AreaChart(document.getElementById(chartDiv));

Если я возьму код ниже, диаграмма отобразит.

 google.visualization.events.addListener(chart, 'ready', function () {
    var zoomLast = getCoords();
    var observer = new MutationObserver(function () {
        var zoomCurrent = getCoords();
        if (JSON.stringify(zoomLast) !== JSON.stringify(zoomCurrent)) {
            zoomLast = getCoords();
            console.info('zoom event');
        }
    });
    observer.observe(chartDiv, {
        childList: true,
        subtree: true
    });
});

function getCoords() {
    var chartLayout = chart.getChartLayoutInterface();
    var chartBounds = chartLayout.getChartAreaBoundingBox();
    return {
        x: {
            min: chartLayout.getHAxisValue(chartBounds.left),
            max: chartLayout.getHAxisValue(chartBounds.width + chartBounds.left)
        },
        y: {
            min: chartLayout.getVAxisValue(chartBounds.top),
            max: chartLayout.getVAxisValue(chartBounds.height + chartBounds.top)
        }
    };
}

Теперь он работает

Я удалил

var chartDiv = document.getElementById('chartScore')

и изменил

observer.observe(chartDiv, {

к

observer.observe(document.getElementById('chartScore'), {

вы можете создать скрипт js?

Bhumi Shah 22.06.2018 11:49

@BhumiShah Я думаю, вы можете использовать пример, который я только что опубликовал

mHelpMe 22.06.2018 12:00

вы хотите сбросить, когда пользователь щелкает правой кнопкой мыши?

Bhumi Shah 22.06.2018 12:05

Нет, диаграмма Google делает это автоматически, когда кто-то щелкает правой кнопкой мыши. Я просто хочу знать, когда пользователь щелкает правой кнопкой мыши по диаграмме

mHelpMe 22.06.2018 12:12
Поведение ключевого слова "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) для оценки ваших знаний,...
1
4
989
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

наблюдатель мутаций сообщит вам, когда что-нибудь на графике изменилось. что означает, что он будет срабатывать при наведении или выборе точки и т. д.

но вы можете отслеживать текущий уровень масштабирования и определять, когда он изменяется

см. следующий рабочий фрагмент ...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var data = google.visualization.arrayToDataTable([
    [0, 6],
    [1, 7],
    [2, 8],
    [3, 9],
    [4, 5]
  ], true);

  var options = {
    pointSize: 4,
    explorer: {
      keepInBounds: true,
      actions: ['dragToZoom', 'rightClickToReset']
    }
  };

  var container = document.getElementById('chart_div');
  var chart = new google.visualization.LineChart(container);

  google.visualization.events.addListener(chart, 'ready', function () {
    var zoomLast = getCoords();
    var observer = new MutationObserver(function () {
      var zoomCurrent = getCoords();
      if (JSON.stringify(zoomLast) !== JSON.stringify(zoomCurrent)) {
        zoomLast = getCoords();
        console.info('zoom event');
      }
    });
    observer.observe(container, {
      childList: true,
      subtree: true
    });
  });

  function getCoords() {
    var chartLayout = chart.getChartLayoutInterface();
    var chartBounds = chartLayout.getChartAreaBoundingBox();

    return {
      x: {
        min: chartLayout.getHAxisValue(chartBounds.left),
        max: chartLayout.getHAxisValue(chartBounds.width + chartBounds.left)
      },
      y: {
        min: chartLayout.getVAxisValue(chartBounds.top),
        max: chartLayout.getVAxisValue(chartBounds.height + chartBounds.top)
      }
    };
  }

  chart.draw(data, options);
});
<script src = "https://www.gstatic.com/charts/loader.js"></script>
<div id = "chart_div"></div>

спасибо за ваш пост. Я обновил свой пост, добавив дополнительную информацию, так как теперь у меня возникают ошибки при попытке загрузить диаграмму.

mHelpMe 22.06.2018 14:34

Извините, теперь он работает с опубликованными корректировками. Однако теперь это остановило работу кода для нажатия на легенду и удаления / отображения серии

mHelpMe 22.06.2018 15:17

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