javascript - 在 Highchart 图例中,想要在开始时带上复选框

标签 javascript jquery highcharts

我想在通常位于项目名称之后的项目名称之前添加 Checkbox。 有关更多说明,请参阅下图。

enter image description here

最佳答案

默认情况下它不受支持,但您可以为此使用简单的解决方法,请参阅: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; })
    }]

});

编辑: 另一种更通用的解决方案是包装 positionCheckboxes 函数。例如:

(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);

和演示:http://jsfiddle.net/Le4Vc/85/

关于javascript - 在 Highchart 图例中,想要在开始时带上复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19174158/

相关文章:

javascript - 单击下拉列表时关闭下拉列表

mysql - Yii2 - 在 Controller Action 中连接到数据库

javascript - Highcharts制作百分比柱形图

javascript - 获得焦点时选择文本框的所有内容(Vanilla JS 或 jQuery)

javascript - 将 Angular Directive(指令)重构为组件

javascript - Azure 函数未在本地触发

javascript - 如何使用 CSS 调整图像和文本的响应式设计?

javascript - 多显示器/双显示器系统上的 window.open() - 窗口在哪里弹出?

jquery - $.each() 循环 + for 循环与 getJSON() 一起使用

canvas - 对 HighCharts、D3 和 Canvas 绘图进行基准测试