html:canvas画布绘图简单入门-1

简介: html:canvas画布绘图简单入门-1

image.png

<!-- 默认宽高:300x150 -->
<canvas id="canvas"
        width="300"
        height="150"></canvas>
<script>
    // 获取画布对象
    let canvas = document.querySelector('#canvas');
    // 获取 CanvasRenderingContext2D 上下文对象(画笔)
    let ctx = canvas.getContext('2d');
    console.log(ctx);
    // 绘制路径
    ctx.rect(50, 50, 50, 50);
    // 填充
    ctx.fillStyle = "green";
    ctx.fill();
    // 描边
    ctx.lineWidth = 20
    ctx.strokeStyle = 'red'
    ctx.stroke()
</script>

示例2:绘制图形和文本

image.png


<canvas id="canvas"></canvas>
<script>
    // 获取上下文
    let canvas = document.querySelector('#canvas');
    let ctx = canvas.getContext('2d');
    console.log(ctx);
    /* 设置线条属性 */
    ctx.lineWidth = 10; // 线条宽度
    ctx.lineCap = 'round'; // 端点样式 butt|round|square
    ctx.lineJoin = "round"; // 拐角样式  bevel|round|miter
    ctx.fillStyle = "green"; // 填充颜色
    ctx.strokeStyle = "red" //  画笔颜色
    /* 绘制三角形 */
    ctx.beginPath();
    ctx.moveTo(10, 10); // 设置起始点
    ctx.lineTo(10, 50);
    ctx.lineTo(50, 50);
    ctx.closePath() // 关闭路径,避免连笔
    ctx.stroke(); // 绘制路径
    ctx.fill(); // 填充
    /* 绘制矩形 */
    ctx.beginPath();
    ctx.moveTo(70, 10);
    ctx.lineTo(70, 50);
    ctx.lineTo(110, 50);
    ctx.lineTo(110, 10);
    ctx.closePath()
    ctx.stroke();
    ctx.fill();
    /* 绘制圆形 */
    ctx.beginPath();
    // (圆心x, 圆心y, 半径, 起始角[弧度计], 结束角[弧度计], false顺时针/true逆时针)
    ctx.arc(150, 30, 20, 0, 2 * Math.PI, false);
    ctx.closePath()
    ctx.stroke();
    ctx.fill();
    /* 绘制文本 */
    ctx.font = '40px 微软雅黑' // 字体属性
    ctx.lineWidth = 1; // 线条宽度
    ctx.shadowBlur = 20; // 阴影模糊级别
    ctx.shadowColor="black"; // 阴影颜色
    ctx.shadowOffsetX = 10; // 阴影水平距离
    ctx.shadowOffsetY = 20; // 阴影垂直距离
    ctx.fillText('Hello', 10, 100); // 绘制填充文本
    ctx.strokeText('Hello', 130, 100); // 绘制镂空文本
</script>

示例3:配合定时器实现弹幕效果

image.png


<canvas id="canvas"
            width="600"
            height="600"></canvas>
    <script>
        // 获取上下文
        let canvas = document.querySelector('#canvas');
        let ctx = canvas.getContext('2d');
        console.log(ctx);
        ctx.font = "50px 微软雅黑"
        let x = 600;
        setInterval(() => {
            // 清空画布
            ctx.clearRect(0, 0, 600, 600);
            x -= 3;
            if (x < -300) {
                x = 600;
            }
            ctx.fillText('Hello World', x, 100);
            ctx.strokeText('你好,世界', x, 200);
        }, 16)
    </script>

示例4:绘制图像

image.png


<canvas id="canvas"
            width="600"
            height="600"></canvas>
    <script>
        let canvas = document.querySelector('#canvas');
        let ctx = canvas.getContext('2d');
        // 绘制图像,注意:需要等图片载入后再绘制
        let img = new Image();
        img.onload = function () {
            ctx.drawImage(img, 0, 0)
        }
        img.src = 'https://www.runoob.com/wp-content/uploads/2013/11/img_the_scream.jpg';
    </script>

示例5:绘制视频帧


image.png

<canvas id="canvas"
            width="600"
            height="600"></canvas>
    <video id="video"
           src="https://www.runoob.com/wp-content/uploads/2013/11/mov_bbb.mp4"
           controls></video>
    <script>
        let canvas = document.querySelector('#canvas');
        let video = document.querySelector('#video');
        let ctx = canvas.getContext('2d');
        // 播放开始后,每隔16ms 绘制视频的当前帧
        let timer = null;
        video.onplay = function () {
            timer = setInterval(() => {
                ctx.drawImage(video, 0, 0)
            }, 16)
        }
        // 播放暂停和结束,清除绘制定时器
        function clearTimer() {
            clearInterval(timer);
        }
        video.onpause = clearTimer
        video.onended = clearTimer
    </script>
相关文章
|
9天前
|
前端开发 JavaScript
Canvas三维变化背景动画HTML源码
Canvas三维变化背景动画HTML源码
20 5
|
2月前
|
XML 移动开发 前端开发
HTML5 SVG和canvas的性能探讨
HTML5 中的 SVG(可缩放矢量图形)和 Canvas(画布)分别用于网页图形绘制。SVG 基于矢量图形,使用 XML 描述,适合静态或少量动态内容(如图标、图表),易于编辑且保持高分辨率;Canvas 则基于位图,通过 JavaScript 绘制,更适合快速更新大量图形的场景(如游戏、动态动画),但在复杂图形计算时可能遇到性能瓶颈。总体而言,SVG 适用于静态和少量动态内容,而 Canvas 更适合高频率更新和性能要求高的场景。
|
2月前
|
移动开发 前端开发 JavaScript
HTML5 Canvas详解及应用
HTML5 Canvas 允许通过 JavaScript 在网页上动态绘制图形、动画等视觉内容。首先在 HTML 中定义 `&lt;canvas&gt;` 元素,并通过 JavaScript 获取画布上下文进行绘制。常见方法包括绘制矩形、路径、圆形和文本,以及处理图像和创建动画效果。适用于游戏开发、数据可视化、图像编辑和动态图形展示等多种应用场景。需要注意性能优化、无状态绘制及自行处理事件等问题。
|
2月前
|
前端开发 程序员
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
59 19
|
28天前
|
移动开发 前端开发 JavaScript
HTML入门(详细)
HTML入门(详细)
23 0
|
2月前
|
移动开发 前端开发 数据挖掘
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
|
2月前
|
前端开发
在 HTML canvas 绘制文本
在 HTML canvas 绘制文本
18 0
|
Web App开发 移动开发 前端开发
|
2月前
|
前端开发
Html:CSS的书写位置
Html:CSS的书写位置
31 0
|
2天前
|
移动开发 前端开发 JavaScript
[HTML、CSS]细节与使用经验
本文总结了前端开发中的一些重要细节和技巧,包括CSS选择器、定位、层级、全局属性、滚轮控制、轮播等。作者以纯文字形式记录,便于读者使用<kbd>Ctrl + F</kbd>快速查找相关内容。文章还提供了示例代码,帮助读者更好地理解和应用这些知识点。
14 1
[HTML、CSS]细节与使用经验