第十一篇canvas基础

这篇博客介绍了HTML5 Canvas的基础用法,包括如何使用JavaScript在Canvas上绘制线段、矩形和三角形,并探讨了DOM节点的操作,如创建、删除和替换元素。

一、基础介绍

       canvas 是一块画布,可以在上面绘制图像。使用 HTML5 的 canvas 来画画。使用 JavaScript 进行图像绘制canvas 基础绘制线段, <canvas> 标签只是图形容器,必须使用脚本来绘制图形。可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。<canvas> 标签定义图形,比如图表和其他图像,必须使用脚本来绘制图形。例如在画布上(Canvas)画一个红色矩形,渐变矩形,彩色矩形,和一些彩色的文字等。

二、绘制线段

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第十一篇 JS canvas</title>
    <style>
    canvas{
    background-color:cadetblue;
    }
    </style>
</head>
<body>
    <canvas id="myCanvas" width="500" height="500"></canvas>
</body>
</html>

运行结果:

 代码解析:

        在 head 部分添加了一个 style,在 style 里添加了一个 canvas 的背景色样式,这是为了给 canvas一个背景色以便查看。不然的话画布颜色跟界面颜色一样,难以分辨;

        canvas 元素需要给予一些宽高和ID的基本属性

        让我们进一步看看 canvas 如何使用

实例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第十一篇 JS canvas</title>
    <style>
        canvas{
            background-color:cadetblue;
        }
    </style>
</head>
<body>
    <canvas id="myCanvas" width="500" height="500"></canvas>
    <script>
        var canvas=document.getElementById('myCanvas');//通过 getElementById 取得对应 canvas 对象
        var context=canvas.getContext('2d');//表示需要绘制图像的类型为2d
        context.beginPath();//充值画布路径,路径就是我们画的线段、线条
        context.moveTo(100,100);//下笔点移动到某一个位置
        context.lineTo(200,200);//从下笔点绘制一条线段到 xy 坐标为 200 的地方
        context.stroke();//开始绘制
    </script>
</body>
</html> 

运行结果:

 代码解析:

        var canvas=document.getElementById('myCanvas'); 表示得到 id 为 myCanvas 的 dom 节点,这个节点为一个 canvas 标签,那么此时变量 canvas 就表示这个 canvas 标签; 也就是这是个 canvas 的对象,那么就可以使用这个对象所对应的一些功能;

        var context=canvas.getContext('2d'); 这句代码中的 canvas 对象指对应的画布对象,因为刚刚使用了 getbyID 函数获取到了对应的节点,此时这个 canvas 就表示这个节点通过 getContext 指定当前所需要绘制的图片类型,在这里传入了参数为 2d,表示下面以 2d 绘制为主。

        context.beginPath(); 这句代码表示“清空画布”,也就是重置画布内容,让画布显示干净些。

        context.moveTo(100,100); 这句代码表示将下笔的点移动到 (x,y) 为 (100,100) 处。

        context.lineTo(200,200); 这句代码结合之前使用 moveTo 找到了一个洛必点,现在的 lineTo 是画一条直线,把这一条直线画到指定坐标点,也就是 (x,y)为(200,200 ) xy 坐标。

        context.stroke(); 表示开始绘制,之前所写的代码都只是在描述要绘制的步骤,最后一步代码才表示将要绘制的路径进行绘制,就像胸有成竹,心中先有竹子的样子,画竹子的步骤,最后再把竹子画出来。

三、矩形绘制

代码实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第十一篇 JS </title>
    <style>
        canvas{
            background-color:cadetblue;
        }
    </style>
</head>
<body>
    <canvas id="myCanvasa" width="500" height="500"></canvas>
    <script>
        var canvas=document.getElementById('myCanvasa');
        var context=canvas.getContext('2d');
        context.beginPath();
        context.fillRect(10,10,300,400);
    </script>
</body>
</html>

运行结果:

 代码解析:

        这里不用 stroke 函数进行绘制了,直接使用 fillRect 函数绘制一个矩形,这个矩形以(x,y)为(10,10 )的点做起始绘制坐标, 300 和 400 分别是矩形对应的宽和高。

修改颜色:

        添加 fillStyle 属性即可,如   

<script>

        var canvas=document.getElementById('myCanvasa');

        var context=canvas.getContext('2d');

        context.fillStyle = "#0000ff";

        context.beginPath();

        context.fillRect(10,10,300,400);

    </script>

  

运行结果:

去掉填充颜色:

        将 fillRect 函数替换为 strokeRect 函数,fillRect 表示填充绘制矩形 strokeRect 表示不填充。

 <script>

        var canvas=document.getElementById('myCanvasa');

        var context=canvas.getContext('2d');

        context.beginPath();

        context.strokeRect(10,10,300,400);

    </script>

运行结果:

         可以看到有个线条圈出了矩形,也可以修改线条颜色,需要给予 strokeStyle 属性设置一个颜色即可,例如 context.strokeStyle = "#ff0000";;

<script>

        var canvas=document.getElementById('myCanvasa');

        var context=canvas.getContext('2d');

        context.strokeStyle = "#ff0000";

        context.beginPath();

        context.strokeRect(10,10,300,400);

    </script>

运行结果:

四、三角形绘制

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="tCanvasa" width="300" height="300"></canvas>
    <script>
        var canvas=document.getElementById('tCanvasa');//通过 getElementById 查找取得对应的 canvas 对象
        var context=canvas.getContext('2d');//指定了您想要在画布上绘制的类型
        context.lineTo(30, 30);
        context.lineTo(30, 180);
        context.lineTo(180, 180);
        context.lineTo(30, 30);
        context.stroke();
    </script>
</body>
</html>

运行结果:

 

代码解析:

      绘制三角形我们需要懂得线段绘制的概念,上面代码里,先把起始点放在了(x,y)都是 30处,然后绘制一条线段到坐标点为 (30,180 )处,此时是一条垂直的直线,接着再从(30,180) 处绘制一条直线到 (180,180) ,这时就有三角形的两条边,最后再从 (180,180) 处返回最先落笔点(30,30),这样三角形就绘制完啦;

      注意!一定要在路径编写完代码后添加 stroke 函数。

填充颜色,需要添加 fill 函数:context.fill();

<script>

        var canvas=document.getElementById('tCanvasa');//通过 getElementById 查找取得对应的 canvas 对象

        var context=canvas.getContext('2d');//指定了您想要在画布上绘制的类型

        context.lineTo(30, 30);

        context.lineTo(30, 180);

        context.lineTo(180, 180);

        context.lineTo(30, 30);

        context.fill();

        context.stroke();

    </script>

填充结果:

 

改变填充色:

        使用 fillStyle ,例如 context.fillStyle = "#0000ff";,注意!线段闭合才能填充颜色。

<script>

        var canvas=document.getElementById('tCanvasa');//通过 getElementById 查找取得对应的 canvas 对象

        var context=canvas.getContext('2d');//指定了您想要在画布上绘制的类型

        context.lineTo(30, 30);

        context.lineTo(30, 180);

        context.lineTo(180, 180);

        context.lineTo(30, 30);

        context.fillStyle = "#0000ff";

        context.fill();

        context.stroke();

    </script>

修改结果:

        

拓展:

dom 节点:

        DOM 节点是指在XML文档中的每个成分都是一个节点,整个文档就是一个文档节点,每个XML标签是一个元素节点。

创建新 HTML 元素(节点)

        如需向 HTML DOM 添加新元素,必须先创建这个元素(元素节点),然后将其追加到已有的元素。

(1)appendChild() 方法,追加新元素作为父的最后一个子。

代码示例:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>第十一篇 JS canvas</title>

    <style>

        canvas{

            background-color:cadetblue;

        }

    </style>

</head>

<body>

    <div id="div1">
        <p id="p1">这是一个段落。</p>
        <p id="p2">这是另一个段落。</p>
        </div>
        
        <script>
        var para = document.createElement("p");//创建了一个新的 <p> 元素
        var node = document.createTextNode("这是新文本。");//因为要向 <p> 元素添加文本,所以必须先创建文本节点。这段代码创建了一个文本节点
        para.appendChild(node);//用 appendChild 向 <p> 元素追加这个文本节点
        
        var element = document.getElementById("div1");//查找一个已有的元素
        element.appendChild(para);//用 appendChild 向这个已有的元素 div 追加新元素
        </script>

</body>

</html> 

运行结果:

(2)使用 insertBefore() 方法:

代码示例:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>第十一篇 JS canvas</title>

    <style>

        canvas{

            background-color:cadetblue;

        }

    </style>

</head>

<body>

    <div id="div1">
        <p id="p1">这是一个段落。</p>
        <p id="p2">这是另一个段落。</p>
        </div>
        
        <script>
        var para = document.createElement("p");
        var node = document.createTextNode("这是新文本。");
        para.appendChild(node);
        
        var element = document.getElementById("div1");
        var child = document.getElementById("p1");
        element.insertBefore(para, child);//用 insertBefore 向这个已有的元素<p> ID p1 前添加doc节点(添加新元素)
        </script>

</body>

</html> 

运行结果:

 

删除已有 HTML 元素

        删除某个 HTML 元素,需要知晓该元素的父:

示例代码:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>第十一篇 JS canvas</title>

    <style>

        canvas{

            background-color:cadetblue;

        }

    </style>

</head>

<body>
    <!-- HTML 文档包含了一个带有两个子节点(两个 <p> 元素)的 <div> 元素 -->
    <div id="div1">
        <p id="p1">这是一个段落。</p>
        <p id="p2">这是另一个段落。</p>
        </div>
        
        <script>
        var parent = document.getElementById("div1");//查找 id="div1" 的元素 赋值给名为 parent 的变量
        var child = document.getElementById("p1");//查找 id="p1" 的 <p> 元素 赋值给名为 child 的变量
        parent.removeChild(child);//从父元素里删除子元素
        </script>

</body>

</html> 

运行结果:

替换 HTML 元素

        使用 replaceChild() 方法

示例代码:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>第十一篇 JS canvas</title>

    <style>

        canvas{

            background-color:cadetblue;

        }

    </style>

</head>

<body>
    <div id="div1">
        <p id="p1">这是一个段落。</p>
        <p id="p2">这是另一个段落。</p>
        </div>
        
        <script>
        var para = document.createElement("p");
        var node = document.createTextNode("这是新文本。");
        para.appendChild(node);
        
        var parent = document.getElementById("div1");
        var child = document.getElementById("p1");
        parent.replaceChild(para, child);
        </script>

</body>

</html> 

运行结果:

 

参考自:

【前端就业课 第一阶段】HTML5 零基础到实战(十一)canvas 基础_1_bit 的博客-CSDN博客

https://www.runoob.com/html/html5-canvas.html

JavaScript HTML DOM 元素(节点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值