【问题标题】:Mouseover Line on multiple charts when hover on single chart using D3使用 D3 将鼠标悬停在单个图表上时,多个图表上的鼠标悬停线
【发布时间】:2018-01-23 08:28:32
【问题描述】:

如果理解问题有任何困难,请指教。这样,我就可以编辑问题并提供所需的信息。

当我将鼠标悬停在单个图表上时,我想在多个图表上显示线条和工具提示。

在下面的图表中,我能够在单个图表上获得线条,我希望线条应该一直持续到 X 轴,并且还希望在多个图表上突出显示值的工具提示。

下面是我工作至今的jsfiddle

                            $(window).load(function () {
                                                   var textareas$ = $('#chartarea g');
                                                        textareas$.hide();
                        
                        $('input[name="Air"]').change(function () {
                                                    var elem$ = $(this);
                                                    var correspelem$ = textareas$.eq(elem$.val() - 1);
                                                        
                                                        if (elem$.val() == 1) {
                                                                                select('Retail', "#Retail");
                                                                } else if (elem$.val() == 2) {
                                                                                select("Gas", "#Gas");
                                                                } else if (elem$.val() == 3) {
                                                                                select("Dining", "#Dining");
                                                                } else {};
                                                                if (elem$.is(':checked')) correspelem$.show();
                                                                else correspelem$.hide();

                                                               var lastSelectedChartIndex;
                var chartAxis = document.querySelectorAll('#chartarea  .axis.x');
                
                var selectedCharts = document.querySelectorAll('#options input').forEach((elem, index) => {
                if (elem.checked) {
                	lastSelectedChartIndex = index;
                }
                });
                
                //console.log(lastSelectedChartIndex)
                
                chartAxis
                	.forEach((elem, index) => (index !== chartAxis.length - 1) && !(index == lastSelectedChartIndex) ? elem.style.display = 'none' : elem.style.display = 'block')

                                                        });
                                                });

【问题讨论】:

  • 请提供有关如何解决问题的提示。这样我就可以弄清楚..
  • 请使用复选框显示图表
  • 您需要在所有 svg 上传播您的事件才能完成此操作。您可以在图表上创建一个setLinePosition 方法,该方法会在回调中为您的其他图表提供值,然后根据收到的值为每个图表设置线位置
  • 如果不介意,能否提供setLinePosition的代码骨架,

标签: javascript jquery d3.js charts


【解决方案1】:

我更新了你jsfiddle 让你有一些工作。我使用了 VSCode 并重新缩进了代码,希望对你没问题。我所做的是:

  • 在图表中创建事件调度器
  • 在调度程序事件上创建回调
  • 选择所有行
  • 设置他们的位置

回调如下所示:

chart.onHover(function (x) {
    console.log(x);
    d3.selectAll('.hover-line')
        .select('line')
        .attr('x1', x)
        .attr('x2', x)
        .style('opacity', 1)
})

这可行,但我不喜欢每次都重新选择所有内容的事实。调用chart的时候直接订阅事件应该是可以的,但是我就是摸不着头脑。

【讨论】:

  • 谢谢!!有什么方法可以在鼠标悬停时加入两条线,并且我想在悬停时将 y 值显示为工具提示或标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多