实现一个前端小画布

简介: # canvas的介绍在HTML5中` canvas `元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.`<canvas>` 标签只是图形容器,您必须使用脚本来绘制图形。可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。# 鼠标事件我们可以分别控制三个鼠标事件来控制绘画的状态## mouseup这是绑定的鼠标抬起的事件,鼠标抬起后会触发## mousedown这是绑定的鼠标摁下的事件,鼠标摁下后会触发## mousemove这是绑定的鼠标移动的事件,鼠标移动时会触发## 一个小实验```<!DOC

canvas的介绍

在HTML5中 canvas 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.

<canvas> 标签只是图形容器,您必须使用脚本来绘制图形。

可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。

鼠标事件

我们可以分别控制三个鼠标事件来控制绘画的状态

mouseup

这是绑定的鼠标抬起的事件,鼠标抬起后会触发

mousedown

这是绑定的鼠标摁下的事件,鼠标摁下后会触发

mousemove

这是绑定的鼠标移动的事件,鼠标移动时会触发

一个小实验

<!DOCTYPE html>
<html>
    <head>
        <title>
            鼠标事件测试
        </title>
        <style>
            #mouse {
                width: 600px;
                height: 600px;
                background-color: antiquewhite;
            }
        </style>
    </head>
    <body>
        <div id="mouse"></div>
    </body>
    <script>
        let mouse = document.getElementById('mouse');
        // mouse.addEventListener('mousedown',()=>{
        //     alert("鼠标按下")
        // })
        // mouse.addEventListener("mousemove",()=>{
        //     alert("鼠标滑过");
        // })
        mouse.addEventListener("mouseup",()=>{
            alert("鼠标抬起");
        })
    </script>
</html>

测试某一个方法的时候就可以把其他的绑定的鼠标事件注释掉,然后去进行测试。

开始写我们的画布

<!DOCTYPE html>
<html>
    <head>
        <title>
            用cavons实现一个画画的板子
        </title>
        <style>
            html,body {
                width: 100%;
                width: 100%;
            }
            #canvas {
                width: 100%;
                height: 100%;
            }
        </style>
    </head>
    <body>
        <!-- 画布 -->
    <canvas id="canvas"></canvas>
    <script>
        // 获取canvas标签
        const canvas = document.getElementById('canvas');
        //渲染
        const ctx = canvas.getContext('2d');
        //变量开关
        let flag = false;
        //为canvas绑定一个鼠标按下事件
        canvas.addEventListener('mousedown', e => {
            flag = true;
            ctx.moveTo(e.pageX, e.pageY);
        });
        //canvas绑定一个鼠标移动事件
        canvas.addEventListener('mousemove', e => {
            if(flag) {
                ctx.lineTo(e.pageX, e.pageY);
                ctx.stroke();
            }
        });
        //canvas绑定一个鼠标抬起事件
        canvas.addEventListener('mouseup', e => {
            flag = false;
        });
    </script>
    </body>
</html>

以上就完成了我们的画布了

接下来我们运行一下

image.png

虽然很丑,但是效果大概是这个样子

我们来解析一下这段代码,核心思路是首先获取画布对象,然后创建context渲染的实例,接下来我们通过flag的状态来判断一下

我们还可以通过stroke()方法来进行连接点之间,最终实现画布的效果。

(stroke() 方法会实际地绘制出通过 moveTo() 和 lineTo() 方法定义的路径。默认颜色是黑色)

相关文章
|
前端开发 JavaScript 容器
前端|利用<canvas>画布制作地球轨道
前端|利用<canvas>画布制作地球轨道
228 0
|
移动开发 前端开发 JavaScript
Web前端开发笔记——第二章 HTML语言 第十节 画布标签、音视频标签
Web前端开发笔记——第二章 HTML语言 第十节 画布标签、音视频标签
Web前端开发笔记——第二章 HTML语言 第十节 画布标签、音视频标签
|
23天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
103 2
|
23天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
35 0
|
23天前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
23天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
23天前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
23天前
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
下一篇
无影云桌面