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>
  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/6124756.html
Copyright © 2011-2022 走看看