canvas折线图动画

发布于:2023-01-22 ⋅ 阅读:(105) ⋅ 点赞:(0)

代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <canvas id="canvas" width="300" height="200" style="margin-top: 100px;margin-left: 100px;border: 1px solid red;"></canvas>
        <script>
            var arr = [20,30,40,50,60,70,90,110,130,150,170,190,210,230,250];//每个点的x坐标
            var brr = [100,120,80,90,110,130,140,150,130,120,100,90,80,70,50];//每个点的y坐标
            var canvas = document.getElementById("canvas");
                let ctx = canvas.getContext("2d");
              ctx.lineWidth = 2
              var i = 1;
              var arrl = arr.length;//数组长度,15个坐标
              var dh = 0.1;//两点之间的线*dh=正在延长的线
            function zx(){
                //先执行两点之间线段延长的动画
                if(dh<1){//当线段还没延长到终点坐标时执行以下动画
                    ctx.moveTo(arr[i-1],brr[i-1])//起点坐标是终点坐标的上一个点
                    ctx.lineTo(arr[i-1]+(arr[i]-arr[i-1])*dh,brr[i-1]+(brr[i]-brr[i-1])*dh)
                    //移动的坐标点 = 起点坐标+(终点坐标与起点坐标之差)*dh
                    ctx.lineJoin = 'round';
                    ctx.strokeStyle = "#FBC248"
                    ctx.stroke();
                    ctx.closePath();
                    dh+=0.1;//延长线长度 每次增加两点之间的线的1/10
                }else{//一条线段动画完成后
                    i++;//起点坐标和终点坐标 切换成下一个坐标点
                    dh=0.1;//延长线恢复为两点之间的线的0.1倍,等下一次if执行后边坐标点之间线的动画
                }
                if(i<arrl){//当i等于数组长度时停止执行
                setTimeout(zx,10);//10毫秒执行一次
                }
            }
            zx();
        </script>
    </body>
</html>

本文含有隐藏内容,请 开通VIP 后查看