学习EChart.js(四) 移动端显示

ECharts.js 移动端显示

现在很多时候,我们是在用手机、pad等一些移动端设备来进行办公获取数据。所以我们的图表很多时候是需要用移动端设置来查看的,而我们的图表有时候因为数据的偏多,会出现遮挡和重叠的情况。这个时候就需要对移动端的图标显示做一些优化,ECharts对于移动端的优化和支持主要有2个方面。

一、ECharts组件的定位和布局

组件的定位官方描写的比较详细也比较全,我的简单理解为,ECharts.js对于图表里面每个组件和工具都采用了两种尺寸单位和设置固定位置。

一种是比较直接的 像素(px),设置的时间直接以 number 形式填写。比如

title:{
    text:'ECharts 数据统计',
    top:20
}

 

这里就是设置标题组件的距离上面的高度是20px。

还有一种是安装百分比(%)的形式来设置的,百分比值是 string 类型,需要加上引号。比如

legend:{
    data:['访问量','用户量'],
    left:'50%'
}

 

这里标识legend组件的位置距离左侧的距离是整个图表的50%宽度

另外可以通过固定的值来设置所在位置,比如:

  • 可以设置 left: 'center',表示水平居中。
  • 可以设置 top: 'middle',表示垂直居中。

另外针对不同类型的图标还有不同的定位方式。

 

布局这块可以简单归结为两种,一种是 横向(horizontal)显示,一种是 纵向(vertical)显示。

 

二、ECharts自适应能力Media Query

Media Query 提供了『随着容器的尺寸改变而改变』的能力。

复制代码
option = {
    baseOption: { // 这里是基本的『原子option』。
        title: {...},
        legend: {...},
        series: [{...}, {...}, ...],
        ...
    },
    media: [ // 这里定义了 media query 的逐条规则。
        {
            query: {...},   // 这里写规则。
            option: {       // 这里写此规则满足下的option。
                legend: {...},
                ...
            }
        },
        {
            query: {...},   // 第二个规则。
            option: {       // 第二个规则对应的option。
                legend: {...},
                ...
            }
        },
        {                   // 这条里没有写规则,表示『默认』,
            option: {       // 即所有规则都不满足时,采纳这个option。
                legend: {...},
                ...
            }
        }
    ]
};
复制代码

上面的例子中,baseOption、以及 media 每个 option 都是『原子 option』,即普通的含有各组件、系列定义的 option。而由『原子option』组合成的整个 option,我们称为『复合 option』。baseOption 是必然被使用的,此外,满足了某个 query 条件时,对应的 option 会被使用 chart.mergeOption() 来 merge 进去。

多个 query 被满足时的优先级:

注意,可以有多个 query 同时被满足,会都被 mergeOption,定义在后的后被 merge(即优先级更高)。

默认 query:

如果 media 中有某项不写 query,则表示『默认值』,即所有规则都不满足时,采纳这个option。

容器大小实时变化时的注意事项:

在不少情况下,并不需要容器DOM节点任意随着拖拽变化大小,而是只是根据不同终端设置几个典型尺寸。

但是如果容器DOM节点需要能任意随着拖拽变化大小,那么目前使用时需要注意这件事:某个配置项,如果在某一个 query option中出现,那么在其他 query option 中也必须出现,否则不能够回归到原来的状态。(left/right/top/bottom/width/height 不受这个限制。)

『复合 option』 中的 media 不支持 merge

也就是说,当第二(或三、四、五 ...)次 chart.setOption(rawOption) 时,如果 rawOption 是 复合option(即包含 media 列表),那么新的 rawOption.media 列表不会和老的 media 列表进行 merge,而是简单替代。当然,rawOption.baseOption 仍然会正常和老的 option 进行merge。

其实,很少有场景需要使用『复合 option』来多次 setOption,而我们推荐的做法是,使用 mediaQuery 时,第一次setOption使用『复合 option』,后面 setOption 时仅使用 『原子 option』,也就是仅仅用 setOption 来改变 baseOption

 

以上是EChart提供的关于移动端小屏幕自适应的方法,我另外提供一种方式

通过JS识别浏览器信息,然后根据所得的信息,设置图表容器的尺寸,然后再结合EChart的media query更好的展示图表

检测是否为移动端的JS
复制代码
var ismobile = false;
    var browser = {
        versions: function () {
            var u = navigator.userAgent, app = navigator.appVersion;
            return {
                trident: u.indexOf('Trident') > -1, //IE内核
                presto: u.indexOf('Presto') > -1, //opera内核
                webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
                gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
                mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
                iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
                iPad: u.indexOf('iPad') > -1, //是否iPad
                webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
            }; 
        }(), 
        language: (navigator.browserLanguage || navigator.language).toLowerCase() 
    }      
    ismobile =   browser.versions.mobile;
复制代码
这段代码能够识别大部分的移动端设备的浏览器信息,对于一些特殊的浏览器可能会存在缺陷

根据浏览器尺寸,设置图表容器的大小

复制代码
if (browser.versions.mobile) {
         window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", hengshuping, false);
        $("#chartmain").height(pageheight*0.6);
        $("#chartmain").width(pagewidth * 0.95);
    }
    else {
        $("#chartmain").height("500px");
        $("#chartmain").width("700px");
    }


function hengshuping(){
    if(window.orientation==180||window.orientation==0){
        $("#chartmain").height($(window).height()-20);
        $("#chartmain").width("100%");
    }
    if(window.orientation==90||window.orientation==-90){
        $("#chartmain").height($(window).height()-20);
        $("#chartmain").width("100%");  
    }
}
复制代码

结合EChart的 Media Query 设置图表参数

复制代码
function init(){
    ///折现报表实现代码
    var myChart = echarts.init(document.getElementById('chartmain'));
    option = {
        baseOption:{
            title : {
                text: '奶牛数字化养殖报表',
                subtext: '西部电子数据采集'
            },
            tooltip : {
                trigger: 'axis'
            },
            legend: {
                data:['每日饲喂量','产奶量']
            },
            toolbox: {
                show : true,
                feature : {
                    mark : {show: true},
                    dataView : {show: true, readOnly: false},
                    magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
                    restore : {show: true},
                    saveAsImage : {show: true}
                }
            },
            calculable : true,
            xAxis : [
                {
                    type : 'category',
                    boundaryGap : false,
                    data : ['周一','周二','周三','周四','周五','周六','周日']
                }
            ],
            yAxis : [
                {
                    type : 'value'
                }
            ],
            series : [
                {
                    name:'每日饲喂量',
                    type:'line',
                    smooth:true,
                    itemStyle: {normal: {areaStyle: {type: 'default'}}},
                    data:[100, 200, 150, 130, 260, 830, 710]
                },
                {
                    name:'产奶量',
                    type:'line',
                    smooth:true,
                    itemStyle: {normal: {areaStyle: {type: 'default'}}},
                    data:[30, 182, 216, 156, 390, 300, 356]
                }
            ]
        },
        media:[
            //media开始
            {
                query:{},
                option:{
                    title : {
                        text: '奶牛数字化养殖报表',
                        subtext: '西部电子数据采集'
                    },
                    tooltip : {
                        trigger: 'axis'
                    },
                    legend: {
                        data:['每日饲喂量','产奶量']
                    },
                    toolbox: {
                        show : true,
                        feature : {
                            mark : {show: true},
                            dataView : {show: true, readOnly: false},
                            magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    calculable : true,
                    xAxis : [
                        {
                            type : 'category',
                            boundaryGap : false,
                            data : ['周一','周二','周三','周四','周五','周六','周日']
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value'
                        }
                    ],
                    series : [
                        {
                            name:'每日饲喂量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[100, 200, 150, 130, 260, 830, 710]
                        },
                        {
                            name:'产奶量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[30, 182, 216, 156, 390, 300, 356]
                        }
                    ]
                }
            },
            {
                query:{maxWidth:400,ismobile:true},
                option:{
                    title : {
                        text: '奶牛数字化养殖报表',
                        subtext: '西部电子数据采集'
                    },
                    tooltip : {
                        trigger: 'axis'
                    },
                    legend: {
                        data:['每日饲喂量','产奶量'],
                        right: 'center',
                        bottom: 0,
                        orient: 'horizontal'
                    },
                    toolbox: {
                        show : true,
                        orient:'vertical',
                        feature : {
                            mark : {show: true},
                            dataView : {show: true, readOnly: false},
                            magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    calculable : true,
                    xAxis : [
                        {
                            type : 'category',
                            boundaryGap : false,
                            data : ['周一','周二','周三','周四','周五','周六','周日']
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value'
                        }
                    ],
                    series : [
                        {
                            name:'每日饲喂量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[100, 200, 150, 130, 260, 830, 710]
                        },
                        {
                            name:'产奶量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[30, 182, 216, 156, 390, 300, 356]
                        }
                    ]
                }
            }

            //media结束
        ]
    };
                                      
    myChart.setOption(option);
}
复制代码

 效果展示

 

转自:http://www.cnblogs.com/leoxuan/p/6544351.html

转载于:https://www.cnblogs.com/ourLifes/p/8017508.html

### 回答1: Echart.js是一款基于JavaScript的开源可视化库,主要用来生成各种图表和数据可视化。它功能强大、灵活性高,能够满足不同类型的数据可视化需求,支持部分常用的图表类型,如折线图、柱状图、饼图、散点图等,同时也支持自定义图表。Echart.js的使用方便简单,只需引入库文件,然后使用API即可轻松地绘制出漂亮的图表,同时还支持动画效果,使生成图表更加生动形象。除了基础的图表类型以外,Echart.js还支持地图数据可视化,能够将各个省份或国家的数据显示在地图上,更方便地展现区域特点。同时,Echart.js还支持数据的动态更新和切换,能够实现实时数据分析,使数据更加直观易懂。总之,Echart.js是一款功能强大、易于使用的可视化库,适用于各种数据分析和展示场合。 ### 回答2: echart.js是一款基于JavaScript的开源数据可视化库,它可以帮助开发者轻松地创建各种精美的图表、地图、仪表盘等数据可视化界面,实现直观、易懂的数据展示和分析。 echart.js提供了丰富的图表类型,如饼图、柱状图、折线图、散点图等,同时支持多种数据格式的导入,包括数组、JSON、XML等。使用者只需在HTML页面中引入相应的echart.js文件,并设置数据、配置参数,即可实现自定义的数据可视化展示。 echart.js支持多语言、响应式布局、主题定制等功能,同时还提供了强大的图表交互和关联功能,如鼠标滑过、联动数据等,方便用户进行数据探索和分析。 该库还提供了全面的API文档和示例代码,方便开发人员学习和使用。由于它是开源的,因此任何人都可以进行修改和衍生开发,为数据可视化提供更多的创新型解决方案。 总体而言,echart.js是一款功能强大、易用性高、扩展性好的数据可视化工具,值得开发人员和数据分析师在工作中广泛使用。 ### 回答3: echarts.js是一款由百度开发的数据可视化库,是一款快速,简单易用的可视化解决方案,通过它可以轻松地创建各种类型的图表,包括柱状图、折线图、饼图等。它使用了HTML5 Canvas技术,可以在各种设备上展示出非常美观的图表效果。echarts.js也具有良好的扩展性和自定义性,用户可以根据自己的需求自定义图表的样式。 echarts.js在使用过程中,能够处理大量的数据,并可以快速地响应用户操作。它还支持数据动态更新,可以实现实时监控和交互式的数据探索。使用echarts.js可以方便地将多个图表组合在一起,形成一个大的报表界面。 作为一款流行的数据可视化库,echarts.js具有许多优点。它的上手难度低,开发效率高,支持诸多图表类型,数据可视化效果非常好,而且使用规范简单明了,文档详细易懂,完全开放源代码,还有社区完善的支持体系。 当然,echarts.js也存在一些缺点。与其他的数据可视化库相比,它的渲染速度稍慢,对于一些大数据量的可视化需求,可能需要采取一些优化措施。此外,对于一些高级可视化需求,可能需要一些更加专业、灵活的库来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值