js简单的插件(折线图)

自己做的一个简单的折线图,html代码如下

<head>
    <meta charset="UTF-8">
    <title>折线图</title>
    <style>
        #container{
            height: 600px;
            background-image: url("../../day09-20181213/nybj.png");
            background-size: 100% 100%;
        }
    </style>

</head>
<body>
<div id="container"></div>
</body>

js代码如下

<script>
    var obj = {
        id:"container",
        width:1300,
        height:500,
        datas:[
            {
                name:"青岛",
                color:"red",
                data:[30,20,40,21,23,16,33,20,13,21,10,1]
            },
            {
                name:"烟台",
                color:"orange",
                data:[26,21,33,30,24,20,25,10,8,5,8,10]
            },
            {
                name:"威海",
                color:"green",
                data:[42,33,28,18,20,33,25,16,15 ,16,23,3]
            },

        ],
        startX:60,
        startY:450,
        labelColor:"white",
        labelCount:10,
        nameSpace : 80,
        circleColor:"blue",
        tip:"山东省各个城市12个月的平均温度"
    };

    drawLine1(obj);
    function drawLine1(obj) {
        var id = obj.id;
        var datas = obj.datas;
        var width = obj.width;
        var height = obj.height;
        var startX = obj.startX;
        var startY = obj.startY;
        var labelColor = obj.labelColor;
        var labelCount = obj.labelCount;
        var nameSpace = obj.nameSpace;
        var tip = obj.tip;
        var circleColor = obj.circleColor;

        var container = document.getElementById(id);
        var canvas = document.createElement("canvas");
        canvas.width = width;
        canvas.height = height;
        canvas.style.border = "1px solid red";
        container.appendChild(canvas);
        var cvs = canvas.getContext("2d");
        cvs.beginPath();
        cvs.strokeStyle = "white";
        var startY1 = 50;
        cvs.moveTo(startX, startY1);
        cvs.lineTo(startX, startY);
        cvs.lineTo(1200, startY);
        cvs.stroke();
        var length = datas.length;
        var length1 = datas[0].data.length;
        var maxNum = 0;
        for(var i = 0;i < length;i++){
            for (var j = 0;j < length1;j++){
                if (maxNum <= datas[i].data[j]) {
                    maxNum = datas[i].data[j];
                }
            }
        }

        maxNum = maxNum * 1.1;
        var increment =  (startY - startY1) / maxNum;
        var labelSpace = (startY - startY1) / labelCount;
        for (var i = 0; i <= labelCount; i++) {
            var text = Math.round((maxNum / labelCount) * i);
            cvs.beginPath();
            cvs.fillStyle = labelColor;
            cvs.fillText(text, startX - 40, startY - (labelSpace * i ) );
            cvs.closePath();
            cvs.fill();
        }

        var start = 0;
        var end = 0;
        var titleSpace = 30;

        for (let i = 0;i < length ;i++) {
            var k = 100;

            for (let j = 0; j < length1; j++) {

                // end = length1 * (i + 1);
                // start = i * length1;
                //折线
                setTimeout(function () {
                    cvs.beginPath();
                    cvs.strokeStyle = datas[i].color;
                    cvs.moveTo(startX + nameSpace * (j + 1), (startY1 + (maxNum - datas[i].data[j]) * increment ));
                    cvs.lineTo(startX + nameSpace * (j + 2), (startY1 + (maxNum - datas[i].data[j + 1]) * increment));
                    cvs.stroke();
                }, k += 100);

                end = length1 * (i + 1);
                start = i * length1;
                //圆点
                cvs.beginPath();
                cvs.fillStyle = circleColor;
                cvs.arc(startX + nameSpace * (j + 1), (startY1 + (maxNum - datas[i].data[j]) * increment ), 4, 0, Math.PI * 2)
                cvs.closePath();
                cvs.fill();



            }
            cvs.beginPath();
            cvs.strokeStyle = datas[i].color;
            cvs.moveTo(1050, 40 + titleSpace * i);
            cvs.lineTo(1100, 40 + titleSpace * i);
            cvs.stroke();
            cvs.closePath();

            cvs.beginPath();
            cvs.fillStyle = datas[i].color;
            cvs.font = "15px 宋体";
            cvs.fillText(datas[i].name, 1130, 45 + titleSpace * i);
            cvs.stroke();
            cvs.closePath();


        }
        cvs.beginPath();
        cvs.fillStyle = labelColor;
        cvs.fillText(tip,20,30);
        cvs.closePath();
        cvs.fill();
        for(var k = 0;k < length1;k++){
            cvs.beginPath();
            cvs.fillStyle = labelColor;
            cvs.fillText((k + 1) + "月份", startX + nameSpace * (k + 1) - 10, startY + 30 );
            cvs.closePath();
            cvs.fill();
        }



    }
</script>

结果如下(动画效果没有展示)
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UniApp是一个基于Vue.js开发的跨平台应用框架,可以同时开发iOS、Android和Web应用。如果要在UniApp中使用折线图,可以借助第三方的图表库来实现,比如ECharts。 以下是在UniApp中使用ECharts绘制折线图的基本步骤: 1. 安装ECharts插件:在项目根目录下执行命令 `npm install echarts --save`,或者使用其他方式引入ECharts。 2. 在需要使用折线图的页面或组件中,引入ECharts,并创建一个Canvas元素用于绘制图表: ```html <template> <view> <canvas id="chart"></canvas> </view> </template> ``` 3. 在页面或组件的生命周期钩子函数中,初始化ECharts实例,并设置配置项和数据: ```javascript <script> import * as echarts from 'echarts'; export default { onLoad() { // 获取Canvas元素并设置宽高 const canvas = uni.createSelectorQuery().select('#chart'); canvas.fields({ node: true, size: true }).exec((res) => { const chart = echarts.init(res[0].node); chart.resize({ width: res[0].width, height: res[0].height }); // 设置配置项和数据 const option = { // 配置折线图的样式、数据等 // ... }; chart.setOption(option); }); } }; </script> ``` 4. 根据需要,可以在配置项中设置折线图的样式、数据等。具体的配置项和数据格式可以参考ECharts的官方文档。 这样,就可以在UniApp中使用ECharts绘制折线图了。当然,你也可以选择其他的图表库,根据具体使用的库来进行相应的操作。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值