JS canvas画布的基础知识点和操作方式

发布时间:2024年01月16日

canvas的介绍说明

JavaScript中的画布是通过HTML5提供的<canvas>元素来创建和操作的。以下是关于画布的基础知识点和操作方式。

  1. 创建画布: 通过JavaScript代码在HTML文档中创建一个画布元素。

    var canvas = document.createElement('canvas');
    
  2. 设置画布尺寸: 使用widthheight属性设置画布的宽度和高度。

    canvas.width = 500;
    canvas.height = 300;
    
  3. 获取绘图上下文: 获取画布的2d上下文对象,用于进行绘制操作。

    var ctx = canvas.getContext('2d');
    
  4. 绘制形状: 通过绘图上下文对象的方法绘制各种形状,如矩形、圆形、线条等。

    // 绘制矩形
    ctx.fillRect(x, y, width, height);
    
    // 绘制圆形
    ctx.arc(x, y, radius, startAngle, endAngle);
    
    // 绘制线条
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
    ctx.stroke();
    
  5. 绘制文本: 使用绘图上下文对象的方法绘制文本。

    ctx.font = '20px Arial';
    ctx.fillStyle = 'black';
    ctx.fillText('Hello, world!', x, y);
    
  6. 设置样式属性: 使用绘图上下文对象的方法和属性设置绘制的样式,如颜色、线条宽度等。

    ctx.fillStyle = 'red';
    ctx.strokeStyle = 'blue';
    ctx.lineWidth = 2;
    
  7. 清空画布: 使用绘图上下文对象的clearRect()方法清空画布。

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    
  8. 监听鼠标事件: 通过绑定鼠标事件来实现与画布的交互,如点击、移动、拖拽等。

    canvas.addEventListener('click', function(event) {
      var x = event.clientX;
      var y = event.clientY;
      // 处理点击事件
    });
    

以上是关于JavaScript画布的基础知识点和操作方式,你可以根据需要进行相应的操作来绘制和控制画布上的图形和文本。

案例实现

可以使用HTML5的canvas元素和JavaScript来绘制流星雨背景。下面是一个示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Meteor Shower Background</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <canvas id="canvas" width="500" height="500"></canvas>

    <script>
        const canvas = document.getElementById("canvas");
        const ctx = canvas.getContext("2d");

        // 定义流星的数量
        const meteorCount = 100;

        // 定义流星的颜色
        const meteorColor = "#FFFFFF";

        // 创建流星对象
        function createMeteor() {
            return {
                x: Math.random() * canvas.width,
                y: -50,
                length: Math.random() * 80 + 20,
                speed: Math.random() * 5 + 2
            };
        }

        // 初始化流星数组
        const meteors = [];
        for (let i = 0; i < meteorCount; i++) {
            meteors.push(createMeteor());
        }

        // 绘制流星
        function drawMeteor(meteor) {
            ctx.beginPath();
            ctx.moveTo(meteor.x, meteor.y);
            ctx.lineTo(meteor.x + meteor.length, meteor.y + meteor.length);
            ctx.strokeStyle = meteorColor;
            ctx.stroke();
        }

        // 更新流星位置
        function updateMeteor(meteor) {
            meteor.x += meteor.speed;
            meteor.y += meteor.speed;

            if (meteor.x > canvas.width + meteor.length || meteor.y > canvas.height + meteor.length) {
                // 流星超出画布范围,重新生成流星
                Object.assign(meteor, createMeteor());
            }
        }

        // 绘制背景
        function drawBackground() {
            ctx.fillStyle = "#000000";
            ctx.fillRect(0, 0, canvas.width, canvas.height);
        }

        // 渲染动画
        function animate() {
            requestAnimationFrame(animate);

            drawBackground();

            meteors.forEach(meteor => {
                drawMeteor(meteor);
                updateMeteor(meteor);
            });
        }

        animate();
    </script>
</body>
</html>

将上述代码保存为一个HTML文件,用浏览器打开即可看到绘制的500x500的流星雨背景。

文章来源:https://blog.csdn.net/mq1314520_zhl/article/details/135629229
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。