详解通过HTML5 Canvas实现图片的平移及旋转变化的方法

2019-01-28 15:10:26刘景俊
  •         context.fillRect(0,0,800,600);      
  •         context.fillStyle = "#00AAAA";            context.fillRect(100,100,200,100);   
  •            context.fillStyle = "red";   
  •         context.translate(100,100);            context.fillRect(100,100,200,100);   
  •            context.fillStyle = "green";   
  •         context.translate(200,200);            context.fillRect(100,100,200,100);   
  •        };   
  • </script>    </body>   
  • </html>  

    运行结果:
    2016322113015232.jpg (850×500)

    这里的绿色矩形并没有如我们所愿在(300,300)位置处,而是跑到了(400,400)这里。为什么呢?想必大家已经知道了答案——Canvas是基于状态的绘制。在我们第一次平移之后,坐标系已经在(100,100)处了,所以如果继续平移,这个再基于新坐标系继续平移坐标系。那么要怎么去解决呢?很简单,有两个方法。

    第一,在每次使用完变换之后,记得将坐标系平移回原点,即调用translate(-x,-y)。

    第二,在每次平移之前使用context.save(),在每次绘制之后,使用context.restore()。

    切记,千万不要再想着我继续紧接着第一次平移之后再平移translate(100,100)不就行了,这样你自己的坐标系就会乱套,根本找不到自己的坐标系原点在哪,在多次变换或者封装函数之后,会坑死你。所以一定要以最初状态为最根本的参照物,这是原则性问题。这里我建议使用第二种方法,而且在涉及所有图形变换的时候,都要这么处理,不仅仅是平移变换。

    具体使用如下。

    JavaScript Code复制内容到剪贴板
    1. <!DOCTYPE html>    <html lang="zh">   
    2. <head>        <meta charset="UTF-8">   
    3.     <title>平移变换</title>        <style>