echart x轴文本过长和tooltip文本过长的处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caiyongshengCSDN/article/details/79625820

echart x轴文本过长的处理

1.换行

axisLabel和tooltip都设置换行。

tooltip提示框本身不支持换行,所以通过formatter返回一个div来设置样式,从而使其支持换行,但效果不太好,其他的也会受影响;

testBarOption1 = {
    tooltip : {
        trigger: 'axis',
        padding: 10,
        formatter : function(params){
            var newParamsName = "";// 最终拼接成的字符串
            var paramsNameNumber = params[0].name.length;// 文字的个数
            var provideNumber = 10;// 每行能显示的字的个数
            var rowNumber = Math.ceil(paramsNameNumber / provideNumber);// 换行的话,需要显示几行,向上取整

            var data ='';
            $.each(params,function (index,item) {
                data += item.seriesName + '&nbsp;:&nbsp;' + item.value + '</br>'
            });
            /**
             * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
             */
            // 条件等同于rowNumber>1
            if (paramsNameNumber > provideNumber) {
                /** 循环每一行,p表示行 */
                for (var p = 0; p < rowNumber; p++) {
                    var tempStr = "";// 表示每一次截取的字符串
                    var start = p * provideNumber;// 开始截取的位置
                    var end = start + provideNumber;// 结束截取的位置
                    // 此处特殊处理最后一行的索引值
                    if (p == rowNumber - 1) {
                        // 最后一次不换行
                        tempStr = params[0].name.substring(start, paramsNameNumber);
                    } else {
                        // 每一次拼接字符串并换行
                        tempStr = params[0].name.substring(start, end) + "\n";
                    }
                    // 每一次拼接字符串并换行
                    newParamsName += tempStr;// 最终拼成的字符串
                }

            } else {
                // 将旧标签的值赋给新标签
                newParamsName = params[0].name;
            }
            //将最终的字符串返回
            // return newParamsName +'</br>' + data;
            return `<div class="toolDiv" style="white-space: normal;">${newParamsName +'</br>' + data}</div>`
        }
    },
    calculable : true,
    legend: {
        x:'right',
        data:['类型A','类型B','平均值']
    },
    grid: {
        x: 40,
        x2: 10,
        // y: 50,
        // y2: 40,
        borderWidth: '1'
    },
    dataZoom: {   //滚动条
        show: true,
        y: 300,
        // realtime: true,
        start: 0,
        end: 70,
        height: 14,
        handleColor: '#1a8edc',
        handleSize: 5,
        fillerColor: '#a5cdea'
    },
    xAxis : [
        {
            type : 'category',
            axisLine: {   //坐标轴
                show:true,
                lineStyle: {
                    width: 2,
                    color: '#d9d9d9'
                }
            },
            splitLine:{
                show:false
            },
            axisTick: {   //刻度
                lineStyle: {
                    width: 2,
                    color: '#d9d9d9'
                }
            },
            axisLabel: {
                textStyle: {
                    color: '#999'
                    // baseline: 'middle'
                },
                interval: 0,     //文字全部显示
                formatter : function(params){
                    var newParamsName = "";// 最终拼接成的字符串
                    var paramsNameNumber = params.length;// 文字的个数
                    var provideNumber = 10;// 每行能显示的字的个数
                    var rowNumber = Math.ceil(paramsNameNumber / provideNumber);// 换行的话,需要显示几行,向上取整
                    /**
                     * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
                     */
                    // 条件等同于rowNumber>1
                    if (paramsNameNumber > provideNumber) {
                        /** 循环每一行,p表示行 */
                        for (var p = 0; p < rowNumber; p++) {
                            var tempStr = "";// 表示每一次截取的字符串
                            var start = p * provideNumber;// 开始截取的位置
                            var end = start + provideNumber;// 结束截取的位置
                            // 此处特殊处理最后一行的索引值
                            if (p == rowNumber - 1) {
                                // 最后一次不换行
                                tempStr = params.substring(start, paramsNameNumber);
                            } else {
                                // 每一次拼接字符串并换行
                                tempStr = params.substring(start, end) + "\n";
                            }
                            newParamsName += tempStr;// 最终拼成的字符串
                        }

                    } else {
                        // 将旧标签的值赋给新标签
                        newParamsName = params;
                    }
                    //将最终的字符串返回
                    return newParamsName
                }
            },
            data :['结构工程','基坑防护','土石方','地下连续墙','地基处理','防水工程','措施工程措施工程措施工程措施工程','其他','供电','区间','车站辅助设备']
        }
    ],
    yAxis : [
        {
            type : 'value',
            // name : '收入',
            nameTextStyle: {
                color: '#333'
            },
            axisLine: {   //坐标轴
                show:true,
                lineStyle: {
                    width: 2,
                    color: '#d9d9d9'
                }
            },
            splitLine: {     //背景网格线
                show:false,
                lineStyle: {
                    color: '#f5f5f5',
                    width: 1
                }
            },
            axisTick: {   //刻度
                show: false
            },
            axisLabel:{
                formatter: '{value}',
                textStyle: {
                    color: '#999'
                }
            },
            splitArea:{   //背景区域
                show:true,
                areaStyle:{
                    color:['#edf2f6','#fff']
                }
            }

        },
        {     //曲线
            type : 'value',
            // name : '温度',
            axisLine:{
                show:false
            },
            axisLabel : {
                show:false
            },
            splitLine:{
                show:false
            }
        }
    ],
    series : [

        {
            name:'类型A',
            type:'bar',
            // barWidth:30,
            barGap: 10,  //两柱子距离
            barCategoryGap: barCategoryGap,
            itemStyle: {normal:{color:'#8779e8'/*,barBorderRadius:[15,15,0,0]},emphasis:{barBorderRadius:[15,15,0,0]*/}},
            data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4]
        },
        {
            name:'类型B',
            type:'bar',
            // barWidth:30,
            barGap: 10,  //两柱子距离
            barCategoryGap: barCategoryGap,
            itemStyle: {normal:{color:'#c394e5'/*,barBorderRadius:[15,15,0,0]},emphasis:{barBorderRadius:[15,15,0,0]*/}},
            data:[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0]
        },
        {
            name:'平均值',
            type:'line',
            scale: true,
            symbol: 'emptyCircle',   //圆点样式
            symbolSize:3,
            smooth: true,
            splitLine: {
                lineStyle: {
                    color: '#f26078',   //曲线颜色
                    width: 1
                }
            },
            yAxisIndex: 1,
            data:[2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0]
        }
    ]
};

效果:



以上tooltip里文字长的处理并没有生效,单纯只是div的作用,而且其他靠近边缘的也换行了,所以效果不好。

2.axisLabel设置换行(同上),tooltip设置成省略号。

tooltip : {
    trigger: 'axis',
    padding: 10,
    formatter: function(datas) {
        var data ='';
        $.each(datas,function (index,item) {
            data += item.seriesName + '&nbsp;:&nbsp;' + item.value + '</br>'
        });
        if (datas[0].name.length > 5) {
           return datas[0].name.substring(0, 6) + '...'+'</br>' + data;
        } else {
           return datas[0].name +'</br>' + data;
        }
    }
},

效果:


3.axisLabel设置成省略号,tooltip不理它。

xAxis : [
    {
        type : 'category',
        axisLine: {   //坐标轴
            show:true,
            lineStyle: {
                width: 2,
                color: '#d9d9d9'
            }
        },
        splitLine:{
            show:false
        },
        axisTick: {   //刻度
            lineStyle: {
                width: 2,
                color: '#d9d9d9'
            }
        },
        axisLabel: {
            textStyle: {
                color: '#999'
                // baseline: 'middle'
            },
            interval: 0,     //文字全部显示
            formatter: function(val) {
               if (val.length > 5) {
                  return val.substring(0, 6) + '...';
               } else {
                  return val;
               }
            }
          
        data :['结构工程','基坑防护','土石方','地下连续墙','地基处理','防水工程','措施工程措施工程措施工程措施工程','其他','供电','区间','车站辅助设备']
    }
],

效果:



猜你喜欢

转载自blog.csdn.net/caiyongshengCSDN/article/details/79625820