canvas保存当前的环境状态

save():保存当前的绘图状态。
restore():恢复之前保存的绘图状态。
在Canvas环境中绘图时,可以利用所谓的绘图堆栈状态。每个状态随时存储Canvas上下文数据。下面是存储在状态堆栈的数据列表。

属性描述
canvas取得画布元素
fillStyle填充路径的当前的颜色、模式或渐变
globalCompositeOperation指定颜色如何与画布上已有颜色组合(合成)
lineCap指定线段端点的绘制方式
lineJoin指定线段连接的绘制方式
lineWidth绘制线段的宽度
miterLimit当lineJoin为miter时,这个属性指定斜连接长度和二分之一线宽的最大比率
shadowBlur指定阴影模糊度
shadowColor指定阴影颜色
shadowOffsetX指定阴影水平偏移值
shadowOffsetY指定阴影垂直偏移值
strokeStyle指定线段颜色

在Canvas中当前路径和当前位图受Canvas环境控制,不属于保存状态。这个重要的功能允许在画布上对单个对象进行绘画和制作动画。
如上所述用堆栈的原理来解释,就是调用save()方法时,将记录当前的绘图状态,并压入一个堆栈中;接着调用restore()方法时,就会把上一次记录的绘图状态从堆栈中弹出。
需要注意的是,出栈的次数不能多于入栈的次数,故程序中restore()方法调用的次数不应该比save()方法多。

<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>保持当前环境</title>
    <style>
        canvas{
            background: blue;
        }
    </style>
</head>
<body>
    <canvas id="canvas" width="900" height="500" >

    </canvas>
    <script>
    // 获得画板
    var canvas = document.getElementById("canvas");
    // 获得绘画环境
    var cv = canvas.getContext('2d');
    // 开启路径
    cv.beginPath();
    // 移动笔触到开始位置
    cv.moveTo(100,20);
    // 指定要画到哪里去
    cv.lineTo(100,480);
    // 把线条画出来
    cv.strokeStyle = 'red';
    cv.lineWidth = 20;
    cv.stroke();

    // 开启路径
    cv.beginPath();
    // 更改笔触的颜色和粗细
    // 将环境状态恢复到上次保存的状态
    //cv.restore();

    cv.strokeStyle = 'yellow';
    cv.lineWidth = 10;
    cv.moveTo(100,480);
    cv.lineTo(200,200);
    cv.stroke();
    // 保存当前环境状态
    cv.save();

    //开启路径
    cv.beginPath();
    // 更改笔触的颜色和粗细
    cv.strokeStyle='hotpink';
    cv.lineWidth=30;
    //cv.restore(); // 就恢复到上一个状态
    cv.moveTo(200,200);
    cv.lineTo(350,460);
    cv.stroke();


    //开启路径
    cv.beginPath();
    // 更改笔触的颜色和粗细
    cv.strokeStyle='green';
    cv.lineWidth=30;
    cv.moveTo(350,460);
    cv.lineTo(550,160);
    cv.stroke();
    </script>
</body>
</html>

去掉注释如下:
没去掉注释如下:
在这里插入图片描述

别废话,拿你代码给我看。
原文地址:https://www.cnblogs.com/lvxueyang/p/13707481.html