免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2018 | 回复: 0
打印 上一主题 下一主题

[HTML/HTML5] 千呼万唤 HTML 5 (10) - 画布(canvas)之转换 [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-20 09:27 |只看该作者 |倒序浏览
介绍
HTML 5: 画布(canvas)之转换(转换画布的用户坐标系)

  • 平移 | translate()

  • 旋转 | rotate()

  • 缩放 | scale()

  • 矩阵转换 | transform(a, b, c, d, e, f)

  • 矩阵转换 | setTransform(a, b, c, d, e, f)

    示例
    1、平移 | translate()
    canvas/transform/translate.html



        平移


         
            您的浏览器不支持 canvas 标签
         
       

        不断地点我看 Demo
        清除画布
       
         
       
            var ctx = document.getElementById('canvas').getContext('2d');
       
            var canvasX = 0;
            var canvasY = 0;
       
            var stepX = 20;
            var stepY = 20;
       
            function drawIt() {
                if (canvasX == 0 && canvasY == 0)
                    ctx.strokeRect(0, 0, 100, 100);
       
                canvasX += stepX;
                canvasY += stepY;
       
                /*
                 * context.translate(x, y) - 将当前的用户坐标系平移指定的距离
                 *   x - x 轴方向上需要平移的像素数
                 *   y - y 轴方向上需要平移的像素数
                 */
                ctx.strokeStyle = "blue";
                ctx.translate(stepX, stepY);
                ctx.strokeRect(0, 0, 100, 100);
            }
       
            function clearIt() {
                ctx.translate(-canvasX, -canvasY);
                canvasX = 0;
                canvasY = 0;
                ctx.strokeStyle = "black";
       
                ctx.clearRect(0, 0, 400, 400);
            }
       
         

    2、旋转 | rotate()
    canvas/transform/rotate.html



        旋转


         
            您的浏览器不支持 canvas 标签
         
       

        不断地点我看 Demo
        清除画布
       
         
       
            var ctx = document.getElementById('canvas').getContext('2d');
       
            var canvasRadian = 0;
            var stepRadian = 15 * Math.PI / 180;
       
            function drawIt() {
                if (canvasRadian == 0)
                    ctx.strokeRect(360, 0, 20, 60);
       
                canvasRadian += stepRadian;
       
                /*
                 * context.rotate(radian) - 将当前的用户坐标系旋转指定的弧度,顺时针为正值,逆时针为负值
                 *   radian - 弧度值
                 */
                ctx.strokeStyle = "blue";
                ctx.rotate(stepRadian);
                ctx.strokeRect(360, 0, 20, 60);
            }
       
            function clearIt() {
                ctx.rotate(-canvasRadian);
                canvasRadian = 0;
                ctx.strokeStyle = "black";
       
                ctx.clearRect(0, 0, 400, 400);
            }
       
         

    3、缩放 | scale()
    canvas/transform/scale.html



        缩放


         
            您的浏览器不支持 canvas 标签
         
       

        不断地点我看 Demo
        清除画布
       
         
       
            var ctx = document.getElementById('canvas').getContext('2d');
       
            var canvasScaleX = 1;
            var canvasScaleY = 1;
       
            var stepScaleX = 1.1;
            var stepScaleY = 1.1;
       
            function drawIt() {
                if (canvasScaleX == 1 && canvasScaleY == 1)
                    ctx.strokeRect(0, 0, 60, 60);
       
                canvasScaleX *= stepScaleX;
                canvasScaleY *= stepScaleY;
       
                /*
                 * context.scale(x, y) - 将当前的用户坐标系缩放指定的倍数
                 *   x - 水平方向上的缩放倍数
                 *   y - 垂直方向上的缩放倍数
                 */
                ctx.strokeStyle = "blue";
                ctx.scale(stepScaleX, stepScaleY);
                ctx.strokeRect(0, 0, 60, 60);
            }
       
            function clearIt() {
                ctx.scale(1 / canvasScaleX, 1 / canvasScaleY);
                canvasScaleX = 1;
                canvasScaleY = 1;
                ctx.strokeStyle = "black";
       
                ctx.clearRect(0, 0, 400, 400);
            }
       
         

    4、矩阵转换 | transform(a, b, c, d, e, f)
    canvas/transform/transform.html

    本文来自ChinaUnix文档频道,如果查看原文请点:http://doc.chinaunix.net/web/201208/2325449.shtml
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP