echarts折线图动态刷新数据宽高自适应

  • 先看看效果图,这个线是会动的


    动态图.png
  • 话不多说,直接上代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <!-- 移动端适配要加这个meta标签 -->
    <meta name="viewport"
        content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>折线图动态刷新数据</title>
    <!-- 引入 echarts.js -->
    <script src="./echarts.min.js"></script>
    <!-- <script>
        //rem布局
        var d = document.documentElement;
        var cw = d.clientWidth || 750;
        document.documentElement.style.fontSize = (cw / 750 * 100) + 'px';
    </script> -->
</head>
<body>
    </div>
    <!-- 2390px  1400p-->
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <!-- <div class="row" style="width:7rem;overflow: hidden;"> -->
    <div id="main"></div>
    <!-- <div id="main2" style="width: 1200px;height:400px;"></div> -->
    <!-- </div> -->
    <script type="text/javascript">
        //自适应屏幕变化
        var worldMapContainer = document.getElementById('main');
        //用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
        var resizeWorldMapContainer = function () {

            worldMapContainer.style.width = window.innerWidth + 'px';
            worldMapContainer.style.height = window.innerHeight - 200 + 'px';
        };
        //设置容器高宽
        resizeWorldMapContainer();

        //可以使用rem进行布局
        // function fontSize(rem) {
        //  var fontSize = document.documentElement.style.fontSize;
        //  // console.log(fontSize);
        //  return Math.floor(rem * fontSize.replace('px', ''));
        // }
        // var font;
        // //当前屏幕的宽度大于750,字体为12px,反之为20px
        // if (document.documentElement.clientWidth > 750) {
        //  font = fontSize(0.12);
        // } else {
        //  font = fontSize(0.2);
        // }
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        var startTime = () => {
            return new Date("2020-1-1")
        }
        var longs = startTime();//时间2020-1-1
        var dates = longs.getDate();//当前的天数是1
        var xSelf = 7;//基础x轴有几列
        var xyanshen = 1;//基础x轴 再往后延伸几列
        
        function clear(now) {//清除定时器
            if (now == '60') {
                clearInterval(timer);
            }
        }

        function getDate(noss) {
            longs.setDate(dates + noss);//设置天数
            var dateNowTime = longs.getMonth() + 1 + "月" + longs.getDate() + "日";
            longs = startTime();//初始化
            return dateNowTime
        }

        function randomData() {
            now = now + 1;//相当于计时器
            value = value + Math.random() * 21 - 10;//是Y轴的数据
            // console.log(now.toString());
            clear(now);
            var time = getDate(now - 1);
            return {
                name: time,//X轴的数据
                value: [
                    time,
                    Math.floor(Math.random() * 100)
                ]
            }
        }

        function randomData2() {
            value = value + Math.random() * 21 - 10;
            clear(now);
            var time = getDate(now - 1);
            return {
                name: time,
                value: [
                    time,
                    Math.floor(Math.random() * 100)
                ]
            }
        }

        function randomData3() {
            value = value + Math.random() * 21 - 10;
            clear(now);
            var time = getDate(now - 1);
            return {
                name: time,
                value: [
                    time,
                    Math.floor(Math.random() * 100)
                ]
            }
        }
        var xData = [];
        var data = [];//x轴
        var data2 = [];
        var data3 = [];
        var now = +0;
        var oneDay = 1;
        var value = Math.random() * 1000;//y轴显示的
        for (var i = 0; i < xSelf; i++) {
            xData.push(getDate(i))
            data.push(randomData());
            data2.push(randomData2());
            data3.push(randomData3());
        }
        // 给X轴后面多加了一天,突出显示动画的效果
        for (var i = 0; i < xyanshen; i++) {
            xData.push(getDate(i + xSelf))
        }
        // console.log(data)
        option = {//配置
            title: {//标题
                text: '折线图堆叠',
                // left: 'auto',
                textStyle: {
                    fontSize: 12,
                    lineHeight: 1
                },
                padding: [20, 0, 0, 40]
            },
            tooltip: {//气泡框
                trigger: 'axis',
                // 相对位置,让气泡框显示的位置
                position: ['50%', '30%']
            },
            grid: {//整体表格往左偏移了一点
                top: '16%',   // 等价于 y: '16%'
                left: '3%',
                right: '8%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: {//X轴
                type: 'category',
                axisLabel: {//设置X轴的样式
                    rotate: 60,//倾斜60度
                    fontSize: 12
                },
                // fontSize:'40',
                boundaryGap: false,
                data: xData,
                // nameGap: 200,//间隔
            },

            yAxis: {
                name: '单位/万元',
                type: 'value',
                nameTextStyle: {//设置name样式
                    fontSize: 12,
                    align: 'left',
                    color: '#ccc'
                },
                axisLabel: {//设置y轴数据的字体大小
                    fontSize: 12,
                    // formatter:'{value}单位/万元'
                },
            },
            series: [//刚开始页面渲染的时候会进行显示,之后才会显示更新后的数据
                {
                    name: '京东',
                    type: 'line',
                    showSymbol: false,
                    hoverAnimation: false,
                    data: data,
                    markLine: {
                        data: [
                            [{
                                symbol: 'none',
                                x: '85%',
                                yAxis: data[data.length - 1].value[1]
                            }, {
                                symbol: 'circle', //图表标注
                                label: {
                                    normal: {
                                        position: 'start',
                                        formatter: '京东\n{c}'
                                    }
                                },
                                name: '京东',
                                value: data[data.length - 1].value[1], //当前的数据
                                xAxis: data[data.length - 1].value[0], //X轴数据
                                yAxis: data[data.length - 1].value[1] //y轴的数据
                            }]
                        ]
                    }
                },
                {
                    name: '淘宝',
                    type: 'line',
                    showSymbol: false,
                    hoverAnimation: false,
                    data: data2,
                    markLine: {
                        data: [
                            [{
                                symbol: 'none',
                                x: '85%',
                                yAxis: data2[data2.length - 1].value[1]
                            }, {
                                symbol: 'circle', //图表标注
                                label: {
                                    normal: {
                                        position: 'start',
                                        formatter: '淘宝\n{c}'
                                    }
                                },
                                name: '淘宝',
                                value: data2[data2.length - 1].value[1], //当前的数据
                                xAxis: data2[data2.length - 1].value[0], //X轴数据
                                yAxis: data2[data2.length - 1].value[1] //y轴的数据
                            }]
                        ]
                    }
                },
                {
                    name: '天猫',
                    type: 'line',
                    showSymbol: false,
                    hoverAnimation: false,
                    data: data3,
                    markLine: {
                        data: [
                            [{
                                symbol: 'none',
                                x: '85%',
                                yAxis: data3[data3.length - 1].value[1]
                            }, {
                                symbol: 'circle', //图表标注
                                label: {
                                    normal: {
                                        position: 'start',
                                        formatter: '天猫\n{c}'
                                    }
                                },
                                name: '天猫',
                                value: data3[data3.length - 1].value[1], //当前的数据
                                xAxis: data3[data3.length - 1].value[0], //X轴数据
                                yAxis: data3[data3.length - 1].value[1] //y轴的数据
                            }]
                        ]
                    }
                }
            ]
        };

        var timer = setInterval(function () {//定时器

            for (var i = 0; i < 1; i++) {
                data.shift();//头删
                data.push(randomData());//尾添
                xData.shift();
                xData.push(getDate(now + xyanshen - 1));
                data2.shift();
                data2.push(randomData2());
                data3.shift();
                data3.push(randomData3());
            }

            myChart.setOption({//设置
                legend: {
                    data: ['单位/万元']
                },
                series: [{//放多个数据
                    name: '京东',
                    type: 'line',
                    showSymbol: false,
                    smooth: false,  //true 为平滑曲线,false为直线
                    hoverAnimation: false,
                    data: data,
                    markLine: {
                        data: [
                            [{
                                symbol: 'none',
                                x: '85%',
                                yAxis: data[data.length - 1].value[1]
                            }, {
                                symbol: 'circle',
                                label: {
                                    normal: {
                                        position: 'start',
                                        formatter: '京东\n{c}',
                                        fontSize: 12
                                    }
                                },
                                name: '京东',
                                value: data[data.length - 1].value[1],
                                xAxis: data[data.length - 1].value[0],
                                yAxis: data[data.length - 1].value[1]
                            }]
                        ]
                    }
                },
                {
                    name: '淘宝',
                    type: 'line',
                    showSymbol: false,
                    hoverAnimation: false,
                    data: data2,
                    markLine: {
                        data: [
                            [{
                                symbol: 'none',
                                x: '85%',
                                yAxis: data2[data2.length - 1].value[1]
                            }, {
                                symbol: 'circle', //图表标注
                                label: {
                                    normal: {
                                        position: 'start',
                                        formatter: '淘宝\n{c}',
                                        fontSize: 12
                                    }
                                },
                                name: '淘宝',
                                value: data2[data2.length - 1].value[1], //当前的数据
                                xAxis: data2[data2.length - 1].value[0], //X轴数据
                                yAxis: data2[data2.length - 1].value[1] //y轴的数据
                            }]
                        ]
                    }
                },
                {
                    name: '天猫',
                    type: 'line',
                    showSymbol: false,
                    hoverAnimation: false,
                    data: data3,
                    markLine: {//基准线显示
                        data: [
                            [{
                                symbol: 'none',
                                x: '85%',//x轴坐标定位
                                yAxis: data3[data3.length - 1].value[1]
                            }, {
                                symbol: 'circle', //图表标注
                                label: {
                                    normal: {
                                        position: 'start',
                                        formatter: '天猫\n{c}',
                                        fontSize: 12
                                    }
                                },
                                name: '天猫',
                                value: data3[data3.length - 1].value[1], //当前的数据
                                xAxis: data3[data3.length - 1].value[0], //X轴数据
                                yAxis: data3[data3.length - 1].value[1] //y轴的数据
                            }]
                        ]
                    }
                }
                ]
            });
            myChart.setOption({//设置X轴更新
                xAxis: {
                    data: xData
                }
            });
        }, 1000);

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
        window.addEventListener("resize", function () {//监听页面窗口的变化
            myChart.resize();//横向自适应
            resizeWorldMapContainer(); //高低自适应
        });
    </script>
</body>

</html>
  • 希望能帮助到你,不理解的可以评论区留言,看到就会回复!
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342