1、坐标系和旋转是全局的

  1. <style>
  2. canvas{
  3. width: 500px;
  4. height: 300px;
  5. border: 1px solid;
  6. }
  7. </style>
  8. </head>
  9. <body>
  10. <canvas id="can" width="500px" height="300px"></canvas>
  11. <script>
  12. var canvas = document.getElementById("can");
  13. var ctx = canvas.getContext("2d");
  14. // 坐标系和旋转是全局的,而不是对某一路径有作用
  15. ctx.translate(100,100);
  16. ctx.rotate(Math.PI / 4);
  17. ctx.beginPath();
  18. ctx.strokeRect(0,0,100,50);
  19. ctx.beginPath();
  20. ctx.fillRect(200,0,100,50);
  21. </script>
  22. </body>

2、restore和save:解决坐标轴问题

  1. <style>
  2. canvas {
  3. width: 500px;
  4. height: 300px;
  5. border: 1px solid;
  6. }
  7. </style>
  8. </head>
  9. <body>
  10. <canvas id="can" width="500px" height="300px"></canvas>
  11. <script>
  12. var canvas = document.getElementById("can");
  13. var ctx = canvas.getContext("2d");
  14. ctx.save();//存储当前坐标平移和旋转状态;可保存坐标系的平移数据,缩放数据,旋转数据。
  15. ctx.beginPath();
  16. ctx.translate(100, 100);
  17. ctx.rotate(Math.PI / 4);
  18. ctx.strokeRect(0, 0, 100, 50);
  19. ctx.beginPath();
  20. ctx.restore();// 恢复存储状态
  21. ctx.translate(100, 100);
  22. ctx.fillRect(200, 0, 100, 50);
  23. </script>
  24. </body>