• Ajax/Highcharts—动态图表


    前面写过“Highcharts的用法总结”,当然了,在实际应用中,图表数据都是要从后台获取的,根据之前的使用,贴一些例子来分享学习。

    首先,如果没有获取后台数据,又希望呈现一个动态图表的话,可以很轻易的想到,Y值可以写成随机数,当然,X轴最常见的就是当前时间。那么,同理,用后台获取的数据替换随机数,不就实现了“Ajax—动态图表”嘛。

    一、向图表中插入随机点

    <div id="container21" style="min- 500px;height: 320px;border-bottom: 1px dashed #9b9d9e;"></div>
    <script>
        Highcharts.setOptions({ global: { useUTC: false } });
        var chart21 = new Highcharts.Chart({
            chart: {
                renderTo: 'container21',
                type: 'spline'
            },
            title: {
                text: '历史温度'
            },
            subtitle: {
                text: " "
            },
            credits: {
                enabled: false
            },
            xAxis: {
                type: 'datetime',
                dateTimeLabelFormats: {
                    day: '%H : %M'
                }
            },
            yAxis: {
                labels: {
                    format: '{value}',
                    style: {
                        color: Highcharts.getOptions().colors[0]
                    }
                },
                title: {
                    text: '温度:摄氏度',
                    style: {
                        color: Highcharts.getOptions().colors[0]
                    }
                },
                startOnTick: true,   //为true时,设置min才有效
                min: 0,
                plotLines: [{
                    value: 0,
                     1,
                    color: '#808080'
                }]
            },
            tooltip: {
                formatter: function () {
                    return '<b>' + this.series.name + '</b><br/>' +
                            Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + '<span style="color:#08c">' +
                            Highcharts.numberFormat(this.y, 2) + ' 摄氏度' + '</span>';
                },
                crosshairs: true
            },
            legend: {
                enabled: true
            },
            exporting: {
                enabled: false
            },
            series: [{
                type: 'spline',
                name: '温度',
               
                data: (function () {
                    var data = [],
                            time = (new Date()).getTime(),
                            i;
    
                    for (i = -9; i <= 0; i++) {  // 图表初始显示10个点(均为0),当前时间是最后那个初始点的X,故之前的点的时间(X)是当前时间之前,故i为负
                        data.push({
                            x: time + i * 1000,
                            y: 0
                        });
                    }
                    return data;
                })()
    
            }]
    
        });
    
        setInterval(function(){
            var x;
            var y;
            x = (new Date()).getTime();
            y = Math.random();                  // Y 是随机数
    
            chart21.series[0].addPoint([x, y], true, true);     //追加点并去掉一个点         //chart.series[0].addPoint([x, y]);追加点( 不去掉点 )
        },1000);
        
    </script>

    图表中初始的时候,是10个0,后来就出现随机数点。

    二、用后台获取的数据替换随机数,实现“Ajax—动态图表”

    <script>
        // 温度
        Highcharts.setOptions({ global: { useUTC: false } });
        var chart1 = new Highcharts.Chart({
            chart: {
                renderTo: 'container1',
                type: 'spline'
            },
            title: {
                text: ''
            },
            subtitle: {
                text: " "
            },
            credits: {
                enabled: false
            },
            xAxis: {
                type: 'datetime',
                dateTimeLabelFormats: {
                    day: '%H : %M'
                }
            },
            yAxis: {
                labels: {
                    format: '{value}',
                    style: {
                        color: Highcharts.getOptions().colors[1]
                    }
                },
                title: {
                    text: '温度:摄氏度',
                    style: {
                        color: Highcharts.getOptions().colors[1]
                    }
                },
                startOnTick: true,
                min: 0,
                plotLines: [{
                    value: 0,
                     1,
                    color: '#808080'
                }]
            },
            tooltip: {
                formatter: function () {
                    return '<b>' + this.series.name + '</b><br/>' +
                            Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + '<span style="color:#08c">' +
                            Highcharts.numberFormat(this.y, 2) + ' 摄氏度' + '</span>';
                },
                crosshairs: true
            },
            legend: {
                enabled: true
            },
            exporting: {
                enabled: false
            },
            series: [{
                type: 'spline',
                name: '温度',
                data: (function () {
                    var data = [],
                            time = (new Date()).getTime(),
                            i;
    
                    for (i = -9; i <= 0; i++) {
                        data.push({
                            x: time,
                            y: 0
                        });
                    }
                    return data;
                })()
            }]
        });
    
    // 湿度 Highcharts.setOptions({ global: { useUTC: false } }); var chart2 = new Highcharts.Chart({ chart: { renderTo: 'container2', type: 'spline' }, title: { text: '' }, subtitle: { text: " " }, credits: { enabled: false }, xAxis: { type: 'datetime', dateTimeLabelFormats: { day: '%H : %M' } }, yAxis: { labels: { format: '{value}', style: { color: Highcharts.getOptions().colors[1] } }, title: { text: '湿度:%', style: { color: Highcharts.getOptions().colors[1] } }, startOnTick: true, min: 0, plotLines: [{ value: 0, 1, color: '#808080' }] }, tooltip: { formatter: function () { return '<b>' + this.series.name + '</b><br/>' + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + '<span style="color:#08c">' + Highcharts.numberFormat(this.y, 2) + ' %' + '</span>'; }, crosshairs: true }, legend: { enabled: true }, exporting: { enabled: false }, series: [{ type: 'spline', name: '湿度', data: (function () { var data = [], time = (new Date()).getTime(), i; for (i = -9; i <= 0; i++) { data.push({ x: time, y: 0 }); } return data; })() }] });
        var temperature, humidity;
    
        $(function () {
    
            function getDataList() {
                try {
                    $.ajax({
                        type: "post",
                        url: "/produce/enviroment/getenviroment",
                        data: {
    
                        },
                        dataType: "json",
                        async: false,
                        success: function (e) {
                            temperature = e.Temperature;
                            humidity = e.Humidity;
                        },
                        error: function (e) {
                            console("err");
                        }
                    });
                } catch (e) {
                    console(e);
                }
            }
           
            setInterval(function () {                
                getDataList();
    
                var x1, x2, y1, y2;
                x1 = (new Date()).getTime();
                x2 = (new Date()).getTime();
                y1 = temperature;
                y2 = humidity;
                chart1.series[0].addPoint([x1,y1],true,true);
                chart2.series[0].addPoint([x2, y2], true, true);
            }, 1000);
           
    
        });
    
    </script>

    每秒都获取后台数据,然后插入到图表中~~~

  • 相关阅读:
    Delegate(委托与事件)
    eclipse2020-06创建属于自己的JSP模板(图文)
    eclipse没有新建web项目的解决问题
    my97datepicker实现日期改变立刻触发函数
    jetty启动项目后js修改后无法保存
    js连续的日期判断,判断相差几天
    同步和异步
    面试题
    MYSQL 数据库名、表名、字段名查询
    Spring-MVC
  • 原文地址:https://www.cnblogs.com/lyr1213/p/6296378.html
Copyright © 2020-2023  润新知