canvas基础讲解,绘制直线,弧形,矩形,图片

canvas基础讲解,绘制直线,弧形,矩形,图片

1. 什么是canvas?
1.1 Canvas 是一个矩形区域的画布,可以用 JavaScript 在上面绘画,控制其每一个像素。
1.2 canvas 标签使用 JavaScript 在网页上绘制图像,本身不具备绘图功能。
2. Canvas 标签
2.1 canvas 标签语法和属性 (重点)
标签名 canvas,需要进行闭合。就是一普通的 html 标签。
可以设置 width 和 height 属性,但是属性值单位必须是 px,否则忽略。
width 和 hegiht:默认 300*150 像素
注意:
不要用 CSS 控制它的宽和高,会走出图片拉伸,
重新设置 canvas 标签的宽高属性会让画布擦除所有的内容。
可以给 canvas 画布设置背景色
3. canvas坐标系
canvas 坐标系,从最左上角 0,0 开始。x 向右增大, y 向下增大
在这里插入图片描述

设置绘制起点

ctx.moveTo(x,y)//x:起点x坐标,Y:起点y坐标
//x,y 都是相对于 canvas盒子的最左上角

绘制直线

ctx.lineTo(x, y);

开始绘制路径

ctx.beginPath();
//核心的作用是将 不同绘制的形状进行隔离,
//每次执行此方法,表示重新绘制一个路径,跟之前的绘制的墨迹可以进行分开样式设置和管理。

闭合路径

ctx.closePath();
//闭合路径会自动把最后的线头和开始的线头连在一起。

描边:

ctx.strokeStyle = 'black';  //描边颜色,画笔颜色
ctx.stroke();
ctx.strokeRect(x,y,heigth,width);//绘制矩形

填充

ctx.fillStyle = 'red';  //填充颜色
ctx.fill();  //填充
ctx.fillRect(x,y,heigth,width);//填充矩形

其他

lineWidth()//线条宽度
lineCap()//线条端点样式
ctx.lineCap = 'round'//圆角

4. canvas绘制的基本步骤
canvas 绘制的基本步骤:

  • 第一步:获得上下文 =>canvasElem.getContext(‘2d’);
  • 第二步:开始路径规划 =>ctx.beginPath()
  • 第三步:移动起始点 =>ctx.moveTo(x, y)
  • 第四步:绘制线(矩形、圆形、图片…) =>ctx.lineTo(x, y)
  • 第五步:闭合路径 =>ctx.closePath();
  • 第六步:绘制描边 =>ctx.stroke();
//html 部分:
<canvas id="cavsElem"> 你的浏览器不支持canvas,请升级浏览器 </canvas>
//javascript 部分:
//===============基本绘制api====================
//获得画布
var canvas = document.querySelector('#cavsElem');
var ctx = canvas.getContext('2d'); //获得上下文

canvas.width = 900; //设置标签的属性宽高
canvas.height = 600; //千万不要用 canvas.style.height
canvas.style.border = '1px solid #000';

//绘制三角形
ctx.beginPath(); //开始路径
ctx.moveTo(50, 100); //三角形,左顶点
ctx.lineTo(200, 100); //右顶点
ctx.lineTo(200, 200); //底部的点
ctx.closePath(); //结束路径
ctx.strokeStyle = 'black';  //描边颜色
ctx.fillStyle = 'red';  //填充颜色
ctx.fill();  //填充
ctx.stroke();  //描边

结果如图:(坐标是我自己写上方便理解)
在这里插入图片描述
5. 绘制圆形

arc(x,y,R,起始角度,结束角度,布尔值);//画圆形

false(顺时针),true(逆时针)
在这里插入图片描述
6. 绘制图片

drawImage(图片节点,剪切的x,剪切的y,剪切的width,剪切的heigth,画布的x,画布的y,
画布的宽,画布的高)
translate(width,heigth)//平移画布

7. 例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        canvas{
     
     

            border: 1px solid pink;
        }
    </style>
</head>
<body>
    <div>
        <button onclick="line()">画直线</button>
        <button onclick="hjx()">画矩形</button>
        <button onclick="hyuan()">画圆形</button>
        <button onclick="huaImg()">画图形</button>
    </div>
    <canvas id="mycanvas" width="800" height="500"></canvas>
    <img id="myimg" src="images/21.png" alt="" style="display: none">
    <script>
        /*利用js获取canvas的上下文(画笔)*/
        var ctx = document.getElementById('mycanvas').getContext('2d')
        function line(){
     
     
            ctx.beginPath()
            ctx.strokeStyle = 'pink'
            ctx.lineWidth = 10
            ctx.lineCap = 'round'
            ctx.moveTo(100,100)
            ctx.lineTo(400,100)
            ctx.lineTo(400,300)
            ctx.lineTo(100,100)
            ctx.stroke()
        }
        function hjx() {
     
     
            ctx.beginPath()
            ctx.strokeStyle = 'red'/*画笔颜色*/
            ctx.fillStyle = 'pink'/*填充颜色*/
            ctx.lineWidth = 5
            // ctx.stroke(x,y,高度,宽度)
            // ctx.strokeRect(200,100,50,50)
            ctx.fillRect(200,100,50,50) /*填充矩形*/

        }
        function hyuan() {
     
     
            ctx.beginPath()
            ctx.strokeStyle = 'red'/*画笔颜色*/
            ctx.fillStyle = 'pink'/*填充颜色*/
            ctx.lineWidth = 5
            // ctx.arc(x,y,R,起始角度,结束角度,布尔值)
            ctx.arc(300,300,200,0,Math.PI*2/360*200,true)
            // ctx.stroke()
            ctx.fill()
        }
        function huaImg() {
     
     
            var img = document.getElementById('myimg')
            // ctx.drawImage(你的图片节点,x,y)
            // ctx.drawImage(你的图片节点,x,y,宽度,高度,)
            // ctx.drawImage(你的图片节点,剪切的X,剪切的Y,剪切宽度,剪切的高度,画布的X,画布Y,画的宽,画的高)
            // ctx.drawImage(img,0,0,0,0,200,200,147,470)
            // ctx.drawImage(img,0,0)
            // ctx.drawImage(img,100,100,235,73.5)
            // ctx.translate(200,200)
            // ctx.drawImage(img,100,30,200,117,0,0,300,175.5)
        }
    </script>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43690438/article/details/108711923