Highcharts - Show tooltip on points click instead mouseover

前端 未结 5 1748
无人共我
无人共我 2020-12-03 16:20

Is it possible to have tool tip on clicking of points instead of mouse move.

I have tried with showing values in java script alert as below

plotOpti         


        
相关标签:
5条回答
  • 2020-12-03 16:58

    The problem of first mouse-over tooltip showing in Alexandra Espichán excellent fiddle can be solved via css and the mouseover event omit by replacing his invisibility class with:

    .highcharts-tooltip:not(.clone){
        visibility: hidden !important;
    }
    
    0 讨论(0)
  • 2020-12-03 17:02

    Here is the fix for "Cannot read category of undefined". I just take hovered points of chart and pass them to refresh.

    point: {
        events: {
            mouseOver: function(evt) {
                var hoveredPoints = a.hoverPoints;
                a.tooltip.refresh(hoveredPoints);   
            },
            mouseOut: function() {
                a.tooltip.hide();
            }                       
        }
    }
    

    Sample fiddle here: http://jsfiddle.net/2swEQ/153/

    0 讨论(0)
  • 2020-12-03 17:06

    As @PawelFus states, it's not officially supported but you can fudge this in by taking control of the visiblity of the tooltip.

    First on chart load, hide it:

           chart: {
                events: {
                    load: function(){
                        $('.highcharts-tooltip').hide();
                    }
                }
            },
    

    Disable sticky tracking, and on mouseout hide it, on click show it:

            plotOptions: {
                series: {
                    stickyTracking: false,
                    events: {
                        click: function() {
                            $('.highcharts-tooltip').show();
                        },
                        mouseOut: function() {
                            $('.highcharts-tooltip').hide();
                        }
                    }
                }
            },
    

    Here's a fiddle example.

    First attempt only worked in chrome, here's another:

    Disable the default tooltip:

    tooltip: {
        enabled: false
    },
    

    In the chart load event, create your own:

     chart: {
         events: {
            load: function(){
                this.myTooltip = new Highcharts.Tooltip(this, this.options.tooltip);                    
             }
         }
     },
    

    In the click and mouseout control it:

    plotOptions: {
        series: {
            stickyTracking: false,
            events: {
                click: function(evt) {
                    this.chart.myTooltip.refresh(evt.point, evt);
                },
                mouseOut: function() {
                    this.chart.myTooltip.hide();
                }                       
            }           
        }
    },
    

    I tested this in IE and Chrome, I won't install Firefox anymore.

    Update to code 9/7/2017 with new stack snippet:

    $(function () {
            $('#container').highcharts({
                xAxis: {
                    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
                },
                tooltip: {
                    valueSuffix: '°C',
                    enabled: false
                },
                chart: {
                    events: {
                        load: function(){
                            this.myTooltip = new Highcharts.Tooltip(this, this.options.tooltip);
                        }
                    }
                },
                plotOptions: {
                    series: {
                        stickyTracking: false,
                        events: {
                            click: function(evt) {
                            		this.chart.myTooltip.options.enabled = true;
                                this.chart.myTooltip.refresh(evt.point, evt);
                            },
                            mouseOut: function() {
                                this.chart.myTooltip.hide();
                                this.chart.myTooltip.options.enabled = false;
                            }                       
                        }
                        
                    }
                },
                series: [{
                    name: 'Tokyo',
                    data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
                }]
            });
        });
        
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="https://code.highcharts.com/highcharts.src.js"></script>
    <script src="https://code.highcharts.com/modules/exporting.js"></script>
    
    <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>

    0 讨论(0)
  • 2020-12-03 17:10

    Adding for those who have problems like me with useHTML: true and wants to display tooltip only on click and not on hover.

    tooltip: {
      useHTML: true
    }
    

    Here is a fiddle.

    0 讨论(0)
  • 2020-12-03 17:18

    Just add for those who has the same problems as myself (see comment from @kevinandrada just after correct answer, i can't comment): if you call tooltip.refresh when your tooltip.shared = true you'll get an exception Uncaught TypeError: Cannot read property 'category' of undefined.

    You should provide an array of points as a first argument:

    plotOptions: {
        series: {
            stickyTracking: false,
            events: {
                click: function(evt) {
                    var points = this.chart.series.map(function(d) { 
                        return d.searchPoint(evt, true)
                    });
                    this.chart.myTooltip.refresh(points, evt);
                },
                mouseOut: function() {
                    this.chart.myTooltip.hide();
                }                       
            }           
        }
     },
    
    0 讨论(0)
提交回复
热议问题