echarts绘制股票分时图

4,100 阅读2分钟
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>echarts绘制股票分时图</title>
    <style>
    /* css 代码  */
    </style>
    <script type="text/javascript" src="https://cdn.bootcss.com/echarts/4.2.0-rc.2/echarts.js"></script>
</head>

<body>
    <div id="main" style="min-width:400px;height:400px"></div>
    <script>
    var _current = new Date();
    var base = +new Date(_current.getFullYear(), _current.getMonth(), _current.getDate(), 9, 29, 0);
    var oneMinute = 60 * 1000 * 1;
    var date = [];
    var openValue = Math.round(Math.random() * 300);
    var data = [openValue];
    var _index = 100;//当前开始数据为空的下标

    for (var i = 1; i < 392; i++) {
        var now = new Date(base += oneMinute);
        date.push([now.getHours() < 10 ? ('0' + now.getHours()) : now.getHours(), now.getMinutes() < 10 ? ('0' + now.getMinutes()) : now.getMinutes(), now.getSeconds() < 10 ? ('0' + now.getSeconds()) : now.getSeconds()].join(':'));
        var _value = Math.round((Math.random() - 0.5) * 20 + data[i - 1]);
        if(i>=_index){
            _value = null;
        }
        if (_value < 0) {
            _value = 0;
        }
        data.push(_value);
    }
    console.log(data);

    option = {
        tooltip: {
            trigger: 'axis',
            triggerOn:'mousemove',
            confine:true,
            position: function(pt) {
                return [pt[0], '10%'];
            },
            formatter: function(a,b,c) { //value当前值,index当前索引
                if(a[1].data){
                    a[1].data = ((a[1].data-openValue)/openValue).toFixed(2);
                    return a[0].axisValue+'<br/>模拟数据:'+a[0].data+'<br/>涨跌幅:'+a[1].data+'%';
                }else{
                    // return '暂无';
                }
            }
        },
        title: {
            left: 'center',
            text: '股票分时图',
        },
        toolbox: {
            feature: {
                dataZoom: {
                    yAxisIndex: 'none'
                },
                restore: {},
                saveAsImage: {}
            }
        },
        xAxis: [{
            show: true,
            type: 'category',
            boundaryGap: false,
            data: date,
            position: 'bottom',
            axisLabel: {
                interval: 29,
                textStyle: {
                    color: '#333'
                }
            },
            axisLine: {
                show:true,
                lineStyle: {
                    type: 'solid',
                    color: '#ccc',
                    width: 1
                }
            },
            // 控制网格线是否显示
            splitLine: {
                show: true, 
                //  改变轴线颜色
                lineStyle: {
                    // 使用深浅的间隔色
                    color: '#ccc'
                }                            
            }
        }],
        yAxis: [{
            type: 'value',
            boundaryGap: [0, '100%'],
            axisLine: {// 坐标轴线
                lineStyle: {
                    type: 'solid',
                    color: '#ededed',
                    width: 1
                }
            },
            axisLabel: {// 坐标轴文本标签,详见axis.axisLabel
                textStyle: {
                    color: '#000'
                }
            },
            splitArea:{// 分隔区域
                show:true, // 默认不显示,属性show控制显示与否
                areaStyle:{// 属性areaStyle(详见areaStyle)控制区域样式
                    color:['#fbfbfb','#fbfbfb'],//设置格子背景颜色,第一个设置奇数格子,第二个设置偶数格子
                    opacity:1
                }
            }
        }, {
            type: 'value',
            boundaryGap: [0, '100%'],
            axisLine: {
                lineStyle: {
                    type: 'solid',
                    color: '#ccc',
                    width: 1
                }
            },
            axisLabel: {
                interval: 5,
                textStyle: {
                    color: '#000'
                },
                formatter: function(value, index) { //value当前值,index当前索引
                    return ((value-openValue)/openValue).toFixed(2)+'%';
                }
            }
        }],
        series: [{
            name: '模拟数据',
            type: 'line',
            smooth: true,
            symbol: 'none',
            sampling: 'average',
            yAxisIndex: 0,
            itemStyle: {
                color: '#cf6a32',
                width:1
            },
            areaStyle: {
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                    offset: 0,
                    color: '#eac3ae'
                }, {
                    offset: 1,
                    color: '#f8f1ed'
                }])
            },
            data: data,
            //标识线(收盘价)
            markLine: {
                symbol:'none',//去掉警戒线最后面的箭头
                itemStyle: {
                    normal: {
                        lineStyle: {
                            type: 'solid',
                            color: '#cf6a32',
                            width:1
                        },
                        label: {
                            show: true,
                            position: 'middle'//将警示值放在哪个位置,三个值“start”,"middle","end"  开始  中点 结束
                        }
                    }
                },
                data: [{
                    name: 'Y 轴值为 '+openValue+' 的水平线',
                    yAxis: openValue
                }]
            }
        }, {
            name: '涨跌幅',
            type: 'line',
            smooth: true,
            symbol: 'none',
            sampling: 'average',
            yAxisIndex: 1,
            itemStyle: {
                color: '#cf6a32',
                width:1
            },
            areaStyle: {
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                    offset: 0,
                    color: '#eac3ae'
                }, {
                    offset: 1,
                    color: '#f8f1ed'
                }])
            },
            data: data
        }]
    };

    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);

    //每隔1秒获取最新数据
    var _timer = window.setInterval(function(){
        var now = new Date(base += oneMinute);
        var _value = Math.round((Math.random() - 0.5) * 20 + data[_index - 1]);
        if (_value < 0) {
            _value = 0;
        }
        data[_index] = _value;
        _index++;
        if(_index>=392){
            window.clearInterval(_timer);
        }
        myChart.setOption(option);
    },1000)
    </script>
</body>

</html>