zoukankan      html  css  js  c++  java
  • html5 canvas围绕中心点旋转

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>围绕中心点旋转</title>
    <script src="js/modernizr.js"></script>
    </head>
    
    <body>
    <script type="text/javascript">
    window.addEventListener('load',eventWindowLoaded,false);
    function eventWindowLoaded(){
        canvasApp();
    }
    function canvasSupport(){
        return Modernizr.canvas;
    }
    function canvasApp(){
        if(!canvasSupport()){
            return;
        }else{
            var theCanvas = document.getElementById('canvas')
            var context = theCanvas.getContext("2d")
    
        }
        drawScreen();
        function drawScreen(){
            context.fillStyle="black";
            context.fillRect(20,20,25,25);
            
            
            context.setTransform(1,0,0,1,0,0);
            var angleInRadians = 45 * Math.PI / 180;
            var x = 100;
            var y = 100;
            var width = 50;
            var height = 50;
            context.translate(x+.5*width,y+.5*height);
            context.rotate(angleInRadians);
            context.fillStyle="red";
            context.fillRect(-.5*width,-.5*height,width,height);
            
        }
        
    }
    
    
    </script>
    <canvas id="canvas" width="500" height="500">
    你的浏览器无法使用canvas
    小白童鞋;你的支持是我最大的快乐!!
    </canvas>
    </body>
    </html>

    这一次我们设置了变量。。。是不是感觉看起来莫名的亲切了

            var x = 100;
            var y = 100;
            var width = 50;
            var height = 50;

    然后我们用函数context.translate把画布原点平移到红色正方形的中心点。
    这个函数可以将画布原点移到(x,y)处。这里将原点X坐标值设为红色正方形的左上角的X值(100)
    加上其一半的宽度。使用前面创建的变量即可控制这个红色正方形的属性

    X+0.5*width
    然后Y坐标
    然后执行平移函数
    然后旋转

    实现canvas以图片中心旋转

    利用canvas的roate和translate方法实现按中心旋转的效果

    新建html页

    实现canvas以图片中心旋转

    定义画布,以及图案的位置和大小参数

    obj.x/y为长方形在canvas中的位置

    obj.width/height为长方形的宽高

    实现canvas以图片中心旋转

    画一个简单的长方形,让它每100毫秒旋转1度

    实现canvas以图片中心旋转

     浏览器中打开页面会发现,旋转是以画布的左上角为圆心的

    实现canvas以图片中心旋转

    实现canvas以图片中心旋转

    在旋转之前,把画布的中心位置translate到图片的中心

    旋转之后,把中心translate回初始的位置,然后再绘制长方形

    实现canvas以图片中心旋转

    完成,浏览器打开页面,可以看到图案以中心旋转的效果

    实现canvas以图片中心旋转

    实现canvas以图片中心旋转

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0">
        <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <style type="text/css">
        canvas{
            position: absolute;
            border: 1px solid;
        }
        </style>
    </head>
    <body>
        <canvas id="canvas1" width="800" height="800"></canvas>
        <script type="text/javascript">
            var ctx1=canvas1.getContext('2d');
            var obj={
                x:100,
                y:200,
                200,
                height:400
            };
            /**
             * 画一个简单的长方形,让它每100毫秒旋转1度
             */
            //  浏览器中打开页面会发现,旋转是以画布的左上角为圆心的
            function rotate(){
                ctx1.clearRect(0,0,800,800);
                ctx1.fillStyle='blue';
                ctx1.rotate(Math.PI/180);
                ctx1.strokeRect(obj.x,obj.y,obj.width,obj.height);
                ctx1.fillRect(obj.x,obj.y,obj.width,obj.height);
            }
            // 在旋转之前,把画布的中心位置translate到图片的中心
            function rotate2(){
                ctx1.clearRect(0,0,800,800);
                ctx1.fillStyle='blue';
                ctx1.translate((obj.x+(obj.width/2)),(obj.y+(obj.height/2)));
                ctx1.rotate(Math.PI/180);
                ctx1.translate(-(obj.x+(obj.width/2)),-(obj.y+(obj.height/2)));
                ctx1.strokeRect(obj.x,obj.y,obj.width,obj.height);
                ctx1.fillRect(obj.x,obj.y,obj.width,obj.height);
            }
            // setInterval(rotate,100);
            setInterval(rotate2,100);
        </script>
    </body>
    </html>
  • 相关阅读:
    VBScript把json字符串解析成json对象的2个方法
    vue+php接口
    td标签 内容垂直、水平居中
    win7 安装 IIS 配置ASP 【原创】
    PS 实用技巧
    通信原理实践(一)——音频信号处理
    德飞莱STM32单片机学习(一)——下载环境搭建
    电赛总结(四)——波形发生芯片总结之AD9854
    电赛总结(四)——波形发生芯片总结之AD9851
    电赛总结(四)——波形发生芯片总结之AD9834
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/6124756.html
Copyright © 2011-2022 走看看