锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于echarts+js+fexible.js实现的数据可视化适配案例(附源代码)

时间:2023-03-01 15:30:00 压力继电器油压开关dnbwhj1精密电位器精密电位器whj1

介绍

数据可视化 :借助图形手段,清晰有效地传达和交流信息

ECharts:是一个使用JavaScript实现的开源可视化库可以顺利运行PC与当前大多数浏览器相兼容的移动设备,底层依赖矢量图形库ZRender,数据可视化图表提供直观、交互丰富、高度个性化定制。

数据可视化场景

  • 通用报表
  • 移动端图表
  • 大屏可视化
  • 图编辑&图分析
  • 地理可视化

实现效果在这里插入图片描述

ECharts使用

ECharts使用五部曲:

  • 第一步:下载并引用echarts.js文件:https://echarts.apache.org/zh/index.html

  • 第二步:准备一个有大小的DOM容器

    <div id="main" style="width: 600px;height:400px;">div> 
  • 第三步:初始化echarts实例对象

    var myChart = echarts.init(document.getElementById('main')); 
  • 第四步:指定配置项和数据(option)

    var option = { 
                xAxis: { 
                    type: 'category',      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']  },  yAxis: { 
                    type: 'value'  },  series: [{ 
                    data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line' }] }; 

部分参数如下表所示:

名称 说明
title 标题组件
tooltip 提示框组件
legend 图例组件
toolbox 工具栏
grid 直角坐标系内绘图网格
xAxis 直角坐标系grid中的x轴
yAxis 直角坐标系grid中的y轴
series 系列列表。每个系类通过type决定自己的图表类型(什么类型的图表)
type 类型(什么类型的图表),比如line是折线图,bar柱形等
name 系列名称,用于tooltip的显示,legend的图例筛选变化
color 调色盘颜色列表
  • 步骤五:将配置项设置给echarts示例对象
    myChart.setOption(option);
    

### Echarts-基础配置

需要了解的主要配置:series xAxis yAxis grid tooltip title legend color

更多的参数配置可以到echarts官网的配置手册查询使用

代码演示

var option = { 
        
            color: ['pink', 'blue', 'green', 'skyblue', 'red'],
            title: { 
        
                text: '我的折线图'
            },
            tooltip: { 
        
                trigger: 'axis'
            },
            legend: { 
        
                data: ['直播营销', '联盟广告', '视频广告', '直接访问']
            },
            grid: { 
        
                left: '3%',
                right: '3%',
                bottom: '3%',
                // 当刻度标签溢出的时候,grid 区域是否包含坐标轴的刻度标签。如果为true,则显示刻度标签
                // 如果left right等设置为 0% 刻度标签就溢出了,此时决定是否显示刻度标签
                containLabel: true
            },
            toolbox: { 
        
                feature: { 
        
                    saveAsImage: { 
        }
                }
            },
            xAxis: { 
        
                type: 'category',
                // 坐标轴两边留白策略 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
                boundaryGap: false,
                data: ['星期一', '星期二', '周三', '周四', '周五', '周六', '周日']
            },
            yAxis: { 
        
                type: 'value'
            },
            series: [
                { 
        
                    name: '直播营销',
                    // 图表类型是线形图
                    type: 'line',
                    data: [120, 132, 101, 134, 90, 230, 210]
                },
                { 
        
                    name: '联盟广告',
                    type: 'line',

                    data: [220, 182, 191, 234, 290, 330, 310]
                },
                { 
        
                    name: '视频广告',
                    type: 'line',

                    data: [150, 232, 201, 154, 190, 330, 410]
                },
                { 
        
                    name: '直接访问',
                    type: 'line',

                    data: [320, 332, 301, 334, 390, 330, 320]
                }
            ]
        };

边框图片

盒子大小不一,但是边框样式相同,此时就需要边框图片来完成

边框图片切图原理

把这个图切出去(九宫格),中间部分可以铺排,拉伸或者环绕
按照上右下左的顺序切割图片,分成九部分

中间部分实现平铺(repeat)铺满(round)拉伸(stretch )



这样就是想边框背景图片的使用了

边框图片语法

css3中新增的属性:border-image

语法 说明
border-image-source 用在边框图片的路径
border-image-slice 图片边框向内偏移(裁剪尺寸,不加单位,上右下左的顺序)
border-image-width 图片边框宽度(加单位)(不是边框的宽度是边框图片的宽度)
border-image-repeat 图像边框平铺(repeat)、铺满(round)拉伸(stretch 默认拉伸)
border-image-source: url("images/border.jpg");
border-image-slice: 167 167 167 167;
border-image-width: 20px;
border-image-repeat: round;

复合写法

border-image: url("images/border.jpg") 167/20px round;

案例

  • 边框图片资源地址
  • 裁剪尺寸(上 右 下 左)单位默认px,可使用百分百。
  • 边框图片的宽度,默认边框的宽度。
  • 平铺方式:
    • stretch 拉伸(默认)
    • repeat 平铺,从边框的中心向两侧开始平铺,会出现不完整的图片。
    • round 环绕,是完整的使用切割后的图片进行平铺。
DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
    <style> .box { 
           width: 200px; height: 200px; border: 15px solid pink; border-image-source: url(images/border.jpg); border-image-slice: 167; border-image-repeat: round; } style>
head>

<body>
    <div class="box">div>
body>

html>


案例中使用的图片:

公用面板样式案例

切割示例图:

切割图片的时候尽量按照宽的地方切割,比如下边框要比上边框长,所以按照下边框的长的来切割

/* 公共面板样式 */
.panel { 
        
    position: relative;
    border: 15px solid transparent;
    border-width: .6375rem .475rem .25rem 1.65rem;
    border-image-source: url(../images/border.png);
    border-image-slice: 51 38 20 132;
    margin-bottom: .25rem;
}

通过类名调用字体图标

之前我们通过复制自己字体图标的小方块已经初始化字体图标来引入字体图标
现在再来学医一中新的引入方式,通过类名调用

  1. html页面引入字体图标中css文件
     <link rel="stylesheet" href="fonts/style.css">
    
  2. 标签直接调用图标对应的类名(类名在css文件中标注)
     <span>
        <i class="icon-circleci" style="color: #006cff">i>
        设备总数
    span>
    

立即执行函数

为防止变量名冲突(变量污染),采用立即执行函数

(function(){})()

多个立即执行函数中间必须用分号隔开

修改线性渐变色方式

第一种

color: new echarts.graphic.LinearGradient(
     // (x1,y2) 点到点 (x2,y2) 之间进行渐变
     0, 0, 0, 1,
     [
          { 
         offset: 0, color: '#00fffb' }, // 0 起始颜色
          { 
         offset: 1, color: '#0061ce' }  // 1 结束颜色
    ]
 ),

第二种



// 修改线性渐变色方式 2
color: { 
        
    type: 'linear',
    x: 0,
    y: 0,
    x2: 0,
    y2: 1,
    colorStops: [{ 
        
        offset: 0, color: 'red' // 0% 处的颜色
    }, { 
        
        offset: 1, color: 'blue' // 100% 处的颜色
    }],
    globalCoord: false // 缺省为 false
},

两种方法都能达成以下效果

REM适配

// 实现rem适配
@media screen and (max-width: 1024px) { 
        
     html { 
        
         font-size: 42.66px !important;
     }
 }

 @media screen and (min-width: 1920px) { 
        
     html { 
        
         font-size: 80px !important;
     }
 }

完整代码

css文件包含内容

js文件包含内容

基于echarts+js实现的数据可视化案例文件夹

html代码

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
    <link rel="stylesheet" href="fonts/style.css">
    <link rel="stylesheet" href="css/index.css">
    <script src="js/echarts.min.js">script>
    <script src="js/flexible.js">script>
    <script src="js/jquery-3.6.0.min.js">script>
head>

<body>
    <div class="viewport">
        <div class="column">
            
            <div class="panel overview">
                <div class="inner">
                    <ul>
                        <li>
                            <h4>2,190h4>
                            <span>
                                <i class="icon-circleci" style="color: #006cff">i>
                                设备总数
                            span>
                        li>
                        <li>
                            <h4>190h4>
                            <span>
                                <i class="icon-circleci" style="color: #6acca3">i>
                                季度新增
                            span>
                        li>
                        <li>
                            <h4>3,001h4>
                            <span>
                                <i class="icon-circleci" style="color: #6acca3">i>
                                运营设备
                            span>
                        li>
                        <li>
                            <h4>108h4>
                            <span>
                                <i class="icon-circleci" style="color: #ed3f35">i>
                                异常设备
                            span>
                        li>

                    ul>
                div>
            div>
            
            <div class="panel monitor">
                <div class="inner">
                    <div class="tabs">
                        <a href="javascript:;" class="active">故障设备监控a>
                        <a href="javascript:;">异常设备监控a>
                    div>
                    <div class="content" style="display: block ;">
                        <div class="head">
                            <span class="col">故障时间span>
                            <span class="col">设备地址span>
                            <span class="col">异常代码span>
                         

相关文章