Bootstrap响应式图表设计

2023-02-25 17:25:37 浏览数 (3)

Bootstrap响应式图表设计

在Bootstrap框架中并没有提供完整的响应式图表功能,不过可以引入强大的、基于JavaScript的、完全开源的第三方图表插件,并基于Bootstrap框架良好的兼容性来整合这些第三方插件,最终设计出性能优越的响应式图表 为了实现基于Bootstrap框架的响应式图表的设计,引用了Bootstrap框架、jQuery框架和ECharts插件所需要的脚本文件、样式文件和资源文件,并自定义了相关样式文件和资源文件

实现效果

代码实现

代码语言:javascript复制
<!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">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="favicon.ico">
    <title>Dashboard Template for Bootstrap</title>
    <!-- Bootstrap core CSS -->
    <link href="dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
    <!-- Custom styles for this template -->
    <link href="dist/css/dashboard.css" rel="stylesheet">
    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script src="assets/js/ie-emulation-modes-warning.js"></script>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https@oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https@oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
    <script type="text/javascript">
      // 路径配置
      require.config({
        paths: {
          echarts: 'http://echarts.baidu.com/build/dist'
        }
      });
      // 使用
      require(
              [
                'echarts',
                'echarts/chart/bar',  // 使用柱状图需加载bar模块,此处可按需加载
                'echarts/chart/line', // 使用折线图需加载line模块,此处可按需加载
                'echarts/chart/pie'   // 使用饼状图需加载pie模块,此处可按需加载
              ],
              function (ec) {
                // 基于准备好的dom,初始化echarts图表
                var barChart = ec.init(document.getElementById('id-echart-bar'));
                var lineChart = ec.init(document.getElementById('id-echart-line'));
                var pieChart = ec.init(document.getElementById('id-echart-pie'));
                var barOption = {
                  title: {  //定义图表标题
                    text: 'ECharts 柱状图表示例'
                  },
                  tooltip: {
                    show: true    //是否显示提示信息
                  },
                  legend: { //定义图表副标题
                    data:['编程语言喜欢度百分比(%)']
                  },
                  xAxis : [ //定义图表X方向坐标
                    {
                      data : ["C&C  ","Java","JavaScript","jQuery","Bootstrap","PHP"]
                    }
                  ],
                  yAxis : [//定义图表Y方向坐标
                    {
                      type : 'value',
                      axisLabel: {
                        formatter: '{value} %'
                      }
                    }
                  ],
                  series : [
                    {
                      "name":"喜欢度",
                      "type":"bar",
                      "data":[50, 70, 90, 60, 80, 65]
                    }
                  ]
                };
                // 为echarts对象加载数据
                barChart.setOption(barOption);
                var lineOption = {
                  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'] //启用的动态类型
                      },
                      restore: {              //配置项还原
                        show: true            //是否显示该工具
                      },
                      saveAsImage: {          //保存为图片
                        show: true            //是否显示该工具
                      }
                    }
                  },
                  calculable: true,//是否显示拖拽用的手柄(手柄能拖拽调整选中范围)
                  xAxis: [{
                    type: 'category', //类目轴,适用于离散数据的类目数据
                    boundaryGap: false,//坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。
                    data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']//类目数据
                  }],
                  yAxis: [{
                    type: 'value',  //数值轴,适用于连续数据
                    axisLabel: {    //坐标轴刻度标签的相关设置。
                      formatter: '{value} °C'//使用字符串模板,模板变量为刻度默认标签 {value}
                    }
                  }],
                  series: [{
                    name: '最高气温',                   //系列名称
                    type: 'line',
                    data: [11, 11, 15, 13, 12, 13, 10], //系列中的数据内容数组。数组项通常为具体的数据项。
                    markPoint: {                        //图表标注
                      data: [{
                        type: 'max',                    //特殊的标注类型,标注最大值
                        name: '最大值'
                      }, {
                        type: 'min',                    //特殊的标注类型,标注最小值
                        name: '最小值'
                      }]
                    },
                    markLine: {                         //图表标线
                      data: [{
                        type: 'average',                //平均值
                        name: '平均值'
                      }]
                    }
                  }, {
                    name: '最低气温',
                    type: 'line',
                    data: [1, -2, 2, 5, 3, 2, 0],
                    markPoint: {
                      data: [{
                        name: '周最低',
                        value: -2,    //标注值
                        xAxis: 1,
                        yAxis: -1.5
                      }]
                    },
                    markLine: {
                      data: [{
                        type: 'average',
                        name: '平均值'
                      }]
                    }
                  }]
                };
                // 为echarts对象加载数据
                lineChart.setOption(lineOption);
                var pieOption = {
                  title: {      //标题组件
                    text: '家庭支出',   //主标题文本,支持使用n换行
                    subtext: '虚构图表',  //副标题文本,支持使用 n 换行。
                    x: 'center'
                  },
                  tooltip: {
                    trigger: 'item',  //触发类型:数据项图形触发
                    formatter: "{a} <br/>{b} : {c} ({d}%)"  //字符串模板
                    //饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
                  },
                  legend: {         //图例组件
                    orient: 'vertical',   //图例列表的布局朝向。
                    x: 'left',
                    data: ['日常开支', '投资理财', '奢侈消费', '子女教育', '家庭备用金']//图例的数据数组
                  },
                  toolbox: {  //工具栏
                    show: true,
                    feature: {
                      mark: {
                        show: true
                      },
                      dataView: {//数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新
                        show: true,
                        readOnly: false
                      },
                      magicType: {  //动态类型切换
                        show: true,
                        type: ['pie', 'funnel'],
                        option: {   //各个类型的专有配置项。在切换到某类型的时候会合并相应的配置项。
                          funnel: {
                            x: '25%',
                            width: '50%',
                            funnelAlign: 'left',
                            max: 1548
                          }
                        }
                      },
                      restore: {  //配置项还原。
                        show: true
                      },
                      saveAsImage: {//保存为图片
                        show: true
                      }
                    }
                  },
                  calculable: true,
                  series: [{
                    name: '支出类型',
                    type: 'pie',
                    radius: '55%',
                    center: ['50%', '60%'],
                    data: [{
                      value: 3000,
                      name: '日常开支'
                    }, {
                      value: 3200,
                      name: '投资理财'
                    }, {
                      value: 1000,
                      name: '奢侈消费'
                    }, {
                      value: 1600,
                      name: '子女教育'
                    }, {
                      value: 1600,
                      name: '家庭备用金'
                    }]
                  }]
                };
                // 为echarts对象加载数据
                pieChart.setOption(pieOption);
              }
      );
    </script>
  </head>
  <body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container-fluid">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Bootstrap</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav navbar-right">
            <li><a href="#">EChart.js</a></li>
            <li><a href="#">Examples</a></li>
            <li><a href="#">About</a></li>
          </ul>
          <form class="navbar-form navbar-right">
            <input type="text" class="form-control" placeholder="Search...">
          </form>
        </div>
      </div>
    </nav>
    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
          <ul class="nav nav-sidebar">
            <li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li>
            <li><a href="#">EChart.js</a></li>
            <li><a href="#id-echart-bar">柱状图</a></li>
            <li><a href="#id-echart-line">折线图</a></li>
            <li><a href="#id-echart-pie">饼状图</a></li>
          </ul>
        </div>
        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
          <h1 class="page-header">Bootstrap 图表</h1>
          <div id="id-echart-bar" style="height:500px;width:650px;"></div><hr>
          <div id="id-echart-line" style="height:500px;width:650px;"></div><hr>
          <div id="id-echart-pie" style="height:500px;width:650px;"></div><hr>
        </div>
      </div>
    </div>
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="dist/js/jquery-1.11.3.js"></script>
    <script>window.jQuery || document.write('<script src="assets/js/vendor/jquery.min.js"></script>')</script>
    <script src="dist/js/bootstrap.min.js"></script>
    <!-- Just to make our placeholder images work. Don't actually copy the next line! -->
    <script src="assets/js/vendor/holder.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script src="assets/js/ie10-viewport-bug-workaround.js"></script>
  </body>
</html>

0 人点赞