设置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请求一次后台数据。
以上就是近期遇到的问题总结,如大佬有更好的方法或者我写的有问题,还请大佬不吝赐教。