首页 前端知识 HTML设置字体大小自适应屏幕与echarts图表颜色根据数据大小实时刷新图表颜色

HTML设置字体大小自适应屏幕与echarts图表颜色根据数据大小实时刷新图表颜色

2024-02-20 10:02:59 前端知识 前端哥 731 932 我要收藏

设置html文字大小根据页面大小自适应,在使用rem之前是使用的px和百分比,后来发现页面缩放或在小屏幕的电脑显示不尽人意,后改用rem,写法如:font-size: .21rem;或font-size: 2.1rem;如果前面是0的话可以省略,这样字体就会根据屏幕的大小来自动改变其大小了。不仅如此,除了字体还有div的宽和高等都可以用rem属性设置。

在html使用rem设置字体大小自适应:

在echarts设置字体大小自适应:

在echarts中不能使用rem属性时怎么办呢?解决办法就是先计算屏幕大小,然后还需要在每次渲染图表的时候指定数据位置,否则,在使用ajax更新数据后,数据字体的大小又会恢复成设置之前的字体大小了。

具体代码如下:

var assydaymonthX= []
var assydaymonth= []
var outboxdaymonthX= []
var outboxdaymonth= []
var outboxRrport = []
var assyRrport = []
var thisMonthYield = 100.00
var thisMonthNoYield = 0
var color = "#FFFFFF"
var draw
var bt=0	//必须赋初始值,否则第一次刷新页面是空值,后面根据main页面自动设置

	var width = window.innerWidth;
	var height = window.innerHeight;
	var percent = width / 1920;
	
	//获取按钮的点击事件,点击后根据main页面设置的变量改变,不需要再次赋值
	document.onclick = function(e) {
		var obj = event.srcElement;
		if(obj.type == "button") {
		draw();
		}
		}
	
	
draw = function(){
	
		jsonData = {
		        TYPE: bt
		    }
		
$.ajax({
	url:'/mes/HomePage/list',//地址
	dataType:'json',//数据类型
	data:jsonData,
	type:'POST',//类型
	timeout:5000,//超时


success:function (data,status) {
	var rows = data.rows
	var rowsB = data.rowsB
	var rowsYield = data.rowsYield
	
		
		for(var i=0;i<rowsYield.length;i++){
			//今日综测测试数据
				if(rowsYield[i]['zcstation']=='Function-Test')
				{
					todayYield = rowsYield[i]['y01_YIELD']
					todayYield = todayYield.split("%");
					todayYield = todayYield[0]
					todayNoYield = 100.00-parseFloat(todayYield)
					todayNoYield = todayNoYield.toFixed(2)
					if(todayYield >= 95){
						color = "#00FF00"
					}else if(todayYield >= 90 && todayYield < 95){
						color = "#FFFF00"
					}else{
						color = "#FF0000"
					}
					
				}
			}
		
		
		
		
	
	
	
	
	
	
	for(var i=1;i<=monthDay;i++)
    {
		if(outboxdaymonthX[i-1]!=i)
			{

			  outboxdaymonthX.splice(i-1,0,i)
			  outboxdaymonth.splice(i-1,0,'0')
			}
	}
	
	
	
echarts_33();


function echarts_33() {
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('fb3'));
option = {
	    title: [{
        //text: '射频校准',
	    text:'RF Yield',
        left: 'center',
        textStyle: {
            color: '#fff',
			fontSize:20 * percent
        }

    }],
    tooltip: {
        trigger: 'item',
        formatter: "{a} <br/>{b}: {c} ({d}%)",
position:function(p){   //其中p为当前鼠标的位置
            return [p[0] + 10, p[1] - 10];
        }
    },
    legend: {
    top:'70%',
       itemWidth: 10,
        itemHeight: 10,
                textStyle: {
            color: 'rgba(255,255,255,.5)',
			fontSize:20 * percent
        }
    },
    series: [
        {
        	name:'射频校准',
            type:'pie',
			center: ['50%', '42%'],
            radius: ['40%', '60%'],
            color: ['#00FF00', '#9900FF'],
                   
                   label: {
                       normal: {
                         show: false,
                         formatter: "{d}%",
                         position: "center",
                         lineHight: 0,
                         fontSize: 20 * percent
                       },
                     },
                     
                     
                   
			labelLine: {show:false},
			data:[
                {value:99.80,label: {
                    normal: {
                        show: true,
                        color:'#FFFFFF'
                      }
                    }},
                {value:0.2},
            ]
        }
    ]
};
        
        window.addEventListener('resize', function (e) {
        	myChart.resize();
            //这里必须要再加一次,不然重新渲染后又会变成之前字体大小了
            var width = window.innerWidth;
	        var height = window.innerHeight;
	        var percent = width / 1920;
            myChart.setOption({
              title: {
                textStyle: {
                  fontSize: 20 * percent
                },
                subtextStyle: {
                  fontSize: 20 * percent
                }
              },
            
              series: [
                  {
                      label: {
                          normal: {
                            fontSize: 20 * percent
                          },
                        },
                  }
              ]
            
            
            });
       
          });
    }
	
},

//失败/超时
error:function(XMLHttpRequest,textStatus,errorThrown){
	if(textStatus==='timeout'){
		alert('請求超時');
		setTimeout(function(){
			alert('重新请求');
		},2000);
	}
}

});

	return draw;
}



window.setInterval(draw(),20000);		//20秒更新一次


	
}

以上代码就是我js文件里面写的,当然,是要搭配html页面运行的,所以大家运行不了的,主要部分说一下吧,首先是计算出页面的大小,如下图:

然后根据页面大小动态设置字体大小,原本是设置的20px,现在修改为下图这样:

如果是数据不需要刷新那么按照以上两步就可以了,但是在大多数情况下,数据都是要实时更新的,例如这里我使用了ajax更新数据,那么就需要在渲染时重新设置一次字体大小,如下:

 

注意:比如要设置series里面的label里面的normal的fontSize时,要把上级也写上,否则无效。

echarts图表如何根据数据大小实时刷新呢?

如上边的echarts字体随屏幕大小自适应的代码举例,我在最上边定义了变量color,然后在从获取到的后台的数据切割进行计算,不同阶段的值图表显示不同颜色,最后设置图表刷新时间间隔即可。

设置时间间隔,20000为20秒ajax请求一次后台数据。 

 

以上就是近期遇到的问题总结,如大佬有更好的方法或者我写的有问题,还请大佬不吝赐教。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/2363.html
标签
评论
发布的文章

AJAX(二)jQuery

2024-03-05 09:03:04

jQuery操作DOM(3)

2024-03-05 09:03:36

jQuery - 获取内容和属性

2024-03-05 09:03:34

深拷贝浅拷贝方法总结

2024-03-05 09:03:27

JQuery简介与解析

2024-03-01 12:03:31

Java Web(十)--jQuery

2024-03-05 09:03:24

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!