canvas图形操作(缩放、旋转、位移)

简介: canvas图形操作(缩放、旋转、位移)

一、缩放

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="200" height="200"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.strokeStyle="rgb(0,255,255)"
    ctx.strokeRect(5, 5, 25, 25);
    //缩放图形,宽度2倍,长度2倍
    ctx.scale(2, 2);
    ctx.strokeStyle="rgb(206,70,28)"
    ctx.strokeRect(5, 5, 25, 25)
</script>
</html>

红同矩形长宽各放大了两倍

二、旋转

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="200" height="200"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.strokeStyle="rgb(0,255,255)"
    ctx.strokeRect(50, 20, 100, 50)
    //按照弧度旋转45度,Math.PI/180表示一度(弧度转度)
    ctx.rotate(45*Math.PI/180);
    ctx.strokeStyle="rgb(206,70,28)"
    ctx.strokeRect(50, 20, 100, 50)
</script>
</html>

三、位移

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="210" height="200"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.strokeStyle="rgb(0,255,255)"
    ctx.strokeRect(50, 20, 70, 50)
    //将绘制图形(0,0)坐标位移(70,70)
    ctx.translate(70,70);
    ctx.strokeStyle="rgb(206,70,28)"
    ctx.strokeRect(50, 20, 70, 50)
</script>
</html>

四、缩放、倾斜、位移

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="500" height="500"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.fillStyle="yellow"
    ctx.fillRect(0,0,250,100)
    //水平绘制参数倍数1,水平倾斜30度,垂直绘制1倍,垂直倾斜1弧度,水平移动,垂直移动
    ctx.transform(1,30*Math.PI/180,-0.5,1,30,10);
    ctx.fillStyle="red"
    ctx.fillRect(0,0,250,100)
    ctx.transform(1,30*Math.PI/180,-0.5,1,30,10);
    ctx.fillStyle="blue"
    ctx.fillRect(0,0,250,100)
    ctx.transform(1,30*Math.PI/180,-0.5,1,30,10);
    ctx.fillStyle="pink"
    ctx.fillRect(0,0,250,100)
</script>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
</head>
<body onload="draw('canvas')">
<canvas id="canvas" width="300" height="400">
 
</canvas>
</body>
<script>
    function draw(id) {
        //获取元素
        var canvas = document.getElementById(id);
        if (canvas == null) {
            return false;
        }
        //获取canvas上下文
        var ctx = canvas.getContext('2d');
        //设置径向渐变颜色
        var g1 = ctx.createRadialGradient(400, 50, 50, 400, 50, 400);
        g1.addColorStop(0, 'rgb(255,255,0)');
        g1.addColorStop(0.3, 'rgb(255,0,255)');
        g1.addColorStop(1, 'rgb(0,255,255)');
        ctx.fillStyle = g1;
        ctx.fillRect(0, 0, 500, 500);
        //重新设置中心点
        ctx.translate(200, 50);
        ctx.fillStyle = "rgba(255,0,0,0.25)";
        for (var i = 0; i < 50; i++) {
            ctx.translate(25, 25);
            //设置缩放0.95
            ctx.scale(0.95, 0.95);
            //设置旋转18度
            ctx.rotate(18 * Math.PI / 180);
            ctx.fillRect(0, 0, 100, 50);
        }
    }
</script>
</html>

目录
相关文章
|
1月前
|
前端开发
|
1月前
|
Python
缩放
【5月更文挑战第15天】缩放。
17 1
|
1月前
|
前端开发 JavaScript 搜索推荐
webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)
webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)
34 1
webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)
|
1月前
|
存储 前端开发
canvas详解05-变形
canvas详解05-变形
34 2
|
1月前
|
存储 前端开发 索引
canvas详解09-像素操作
canvas详解09-像素操作
104 1
|
10月前
|
前端开发
canvas正交坐标系旋转--监听滚轮
canvas正交坐标系旋转--监听滚轮
78 0
|
11月前
|
前端开发
css3 效果全(旋转,放大,倾斜,平移)
css3 效果全(旋转,放大,倾斜,平移)
84 0
|
前端开发 JavaScript
canvas中的拖拽、缩放、旋转 (上) —— 数学知识准备
canvas中的拖拽、缩放、旋转 (上) —— 数学知识准备
741 0
canvas中的拖拽、缩放、旋转 (上) —— 数学知识准备
|
前端开发 开发者
Canvas中的拖拽、缩放、旋转 (下)——代码实现
Canvas中的拖拽、缩放、旋转 (下)——代码实现
473 0
Canvas中的拖拽、缩放、旋转 (下)——代码实现
|
前端开发 算法 图形学
用canvas绘制一个曲线动画——深入理解贝塞尔曲线
用canvas绘制一个曲线动画——深入理解贝塞尔曲线
752 0