In Highchart legend, Want to bring checkbox at start

后端 未结 2 457
轮回少年
轮回少年 2020-12-19 15:59

I want to bring Checkbox before item name which are normally after the item name. Refer below image for more description.

相关标签:
2条回答
  • 2020-12-19 16:31

    It's hard to tell without seing your chart code, but you may have some joy with the rtl legend option.

    legend: { rtl: true },

    or

    legend: { rtl: false },

    http://api.highcharts.com/highcharts#legend.rtl

    0 讨论(0)
  • 2020-12-19 16:36

    By default it's not supported, but you can use simple workaround for this, see: http://jsfiddle.net/Le4Vc/4/

    $('#container').highcharts({
    
        chart: {
            events: {
                load: function() {
                    var chart = this;
    
                    $.each(chart.legend.allItems, function(i, item){
                        var $check = $(item.checkbox),
                            left = parseFloat($check.css('left')),
                            label = item.legendItem,
                            static = 30;
    
                        $check.css({
                            left: (left - label.bBox.width - static) + 'px'  
                        });
                    });
    
                }
            }
        },
    
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        plotOptions: {
            series: {
                marker: {
                    enabled: false
                },
                allowPointSelect: true,
                showCheckbox: true
            }
        },
        legend: {
            symbolPadding: 20,
            symbolWidth: 0
        },
        series: [{
            name: 's 1',
            data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
        },{
            name: 'another name',
            data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4].sort(function(a,b) { return a - b; })
        }]
    
    });
    

    Edit: Another solution, more universal is to wrap positionCheckboxes function. For example:

    (function (H) {
        H.wrap(H.Legend.prototype, 'positionCheckboxes', function (p, scrollOffset) {
            var alignAttr = this.group.alignAttr,
                translateY,
                clipHeight = this.clipHeight || this.legendHeight;
    
            if (alignAttr) {
                translateY = alignAttr.translateY;
                H.each(this.allItems, function (item) {
                    var checkbox = item.checkbox,
                        bBox = item.legendItem.bBox,
                        top;
    
                    if (checkbox) {
                        top = (translateY + checkbox.y + (scrollOffset || 0) + 3);
                        H.css(checkbox, {
                            left: (alignAttr.translateX + item.checkboxOffset + checkbox.x - 60 - bBox.width) + 'px',
                            top: top + 'px',
                            display: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : 'none'
                        });
                    }
                });
            }
        });
    })(Highcharts);
    

    And demo: http://jsfiddle.net/Le4Vc/85/

    0 讨论(0)
提交回复
热议问题