echarts x軸過長文字懸浮顯示

功能描述:

x軸文字顯示過長會影響柱狀圖顯示不全,需要對文字進行處理,爲了美觀,限定文字只顯示在一行,文字長度爲4;當長度大於4時將第四個文字替換爲"...";當鼠標懸浮在"..."時,顯示全部內容,其它長度爲4的文字正常顯示;當鼠標移出"..."時,懸浮顯示內容消失。

代碼實現如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>柱狀圖x軸過長文字懸浮顯示</title>
	<script src="echarts.js"></script>
</head>
    
<body>
	<!--爲ECharts 準備一個具備大小的DOM-->
	<div id="main1" style="width:600px; height:600px"></div>
</body>
<script>

	//基於準備好的Demo,實例化ECharts
	var myECharts = echarts.init(document.getElementById('main1'));
	var data0 = [{value:620}, {value:732}, {value:701}, {value:734}, {value:1090}, {value:1130}, {value:1120}];
	var data1= [{value:120}, {value:132}, {value:101}, {value:134}, {value:290}, {value:230}, {value:220}];
	var data2= [{value:60}, {value:72}, {value:71}, {value:74}, {value:190}, {value:130}, {value:110}];
	var data3 = [{value:62}, {value:82}, {value:91}, {value:84}, {value:109}, {value:110}, {value:120}];
	for(var i = 0;i<data1.length;i++){
		var arr = [];
		arr.push(data0[i].value);
		arr.push(data1[i].value);
		arr.push(data2[i].value);
		arr.push(data3[i].value);
		(eval("data"+getMinIndex(arr)))[i].itemStyle = {
				normal:{
					barBorderRadius :[10,10,0,0]
				}
			}
		
	}
	//指定圖標的配置項和數據
	option = {
    tooltip : {
        trigger: 'axis',
        axisPointer : {            // 座標軸指示器,座標軸觸發有效
            type : 'shadow'        // 默認爲直線,可選爲:'line' | 'shadow'
        }
    },
    legend: {
        data:['百度','谷歌','必應','其他']
    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    xAxis : [
        {
            type : 'category',
			triggerEvent:true,
			axisLabel:{
				formatter:function(value){
					
					return linefeed(value,4);
				}
			},
            data : ['哈利波特與死亡聖器','讓暴風雨來得更猛烈一些吧','週三','週四','週五','週六','週日']
        }
    ],
    yAxis : [
        {
            type : 'value'
        }
    ],
    series : [
       
        {
            name:'百度',
            type:'bar',
            barWidth : 18,
            stack: '搜索引擎',
            data:data0,
			itemStyle:{
				normal:{
					color:'#505D6F'
				}
			}
        },
        {
            name:'谷歌',
            type:'bar',
            stack: '搜索引擎',
            data:data1,
			itemStyle:{
				normal:{
					color:'#826AF9'
				}
			}
        },
        {
            name:'必應',
            type:'bar',
            stack: '搜索引擎',
            data:data2,
			itemStyle:{
				normal:{
					color:'#FFCC00'
				}
			}
        },
        {
            name:'其他',
            type:'bar',
            stack: '搜索引擎',
            data:data3,
			itemStyle:{
				normal:{
					color:'#99CEFF'
				}
			},
			label:{
				normal:{
					show:true,
					position:'top',
					formatter:function(param){
					console.log(param.value);
						return param.value+data1[param.dataIndex].value+data2[param.dataIndex].value+data3[param.dataIndex].value
					}
				}
			}
        }
    ]
};
	//使用剛指定的配置項和數據
	myECharts.setOption(option);
	formatXaxis(myECharts,option.tooltip);
	//獲取最頂端柱子
	function getMinIndex(arr){
		var min;
		for(var j = arr.length-1;j<arr.length;j--){
			if(arr[j]!=0){
				min = j;
				break;
			}
		}
		
			return min;
	}
	function linefeed(params,provideNumber,limitLines){
	var newParamsName = "";
	var paramsNameNumber = params.length;
	var rowNumber = Math.ceil(paramsNameNumber/provideNumber);
	if(!limitLines) limitLines = 2;
	var n = rowNumber<limitLines?rowNumber:limitLines;
	if(paramsNameNumber>provideNumber){
		for(var i=0;i<n;i++){
			var tempStr = "";
			var start = i*provideNumber;
			var end = start+provideNumber;
			if(i=n-1&&rowNumber>=limitLines&&paramsNameNumber>8){
				tempStr = params.substring(start,end-1)+"..."
			}else{
				tempStr = params.substring(start,end)+"\n"
			}
			newParamsName+=tempStr;
		}
	}else{
		newParamsName = params
	}
	return newParamsName;
}
function formatXaxis(el,toolTipFn){
	var isXLabel = true;
	el.on('mouseover',function(params){
		if(params.componentType = 'xAxis'&&params.value.length>8){
			var offsetX = params.event.offsetX+10;
			var offsetY = params.event.offsetY+10;
			el.setOption({
				tooltip:{
					formatter:params.value,
					alwaysShowContent:true
				}
			});
			el.dispatchAction({
				type:'showTip',
				seriesIndex:0,
				dataIndex:0,
				position:[offsetX,offsetY]
			})
		}
	});
	el.on('mouseout',function(params){
		if(params.componentType = 'xAxis'&&params.value.length>8){
			el.setOption({
				tooltip:toolTipFn
			});
			el.setOption({
				tooltip:{
					alwaysShowContent:false
				}
			});
		}
	})
}
</script>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章