当前位置: 首页 > news >正文

canvas画板!随意画!!

希望你天天开心

在这里插入图片描述

代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绘画板</title><style>#canvas {border: 1px solid black;border-radius: 5px;}.menu {display: flex;}.button {margin: 5px;}</style>
</head><body><div class="menu"><div class="button">画板</div><div class="button" id="clear">重置</div><div class="button" id="save">保存</div></div><div class="window"><div class="top"><div class="button"></div><div class="button"></div><div class="button"></div></div></div><canvas id="canvas" width="500" height="500"></canvas><script>let painting = false; // 记录绘画let startPoint = { x: undefined, y: undefined }; // 记录起点的位置const canvas = document.getElementById("canvas");const ctx = canvas.getContext("2d");// 鼠标点击canvas.onmousedown = (e) => {let x = e.offsetX;let y = e.offsetY;startPoint = { x: x, y: y };painting = true;}// 鼠标移动canvas.onmousemove = (e) => {let x = e.offsetX;let y = e.offsetY;let newPoint = { x: x, y: y };if (painting) {drawLine(startPoint.x, startPoint.y, newPoint.x, newPoint.y);startPoint = newPoint;}}// 鼠标离开canvas.onmouseup = () => {painting = false;}// 绘制方法function drawLine(xStart, yStart, xEnd, yEnd) {ctx.beginPath();ctx.lineWidth = 3;ctx.moveTo(xStart, yStart);ctx.lineTo(xEnd, yEnd);ctx.stroke();ctx.closePath();}clear.onclick = () => {ctx.fillStyle = "#fff";ctx.clearRect(0, 0, canvas.width, canvas.height);// ctx.fillRect(0, 0, canvas.width, canvas.height); // 同上面效果一致}save.onclick = () => {const url = canvas.toDataURL("image/jpg");const a = document.createElement("a");a.href = url;a.download = "画板";a.target = "_blank";a.click();}</script>
</body></html>

相关文章:

  • C语言标准库函数setlocale用法详解
  • 自定义异常处理(全局异常处理)
  • 用python进行OCR识别
  • 《解锁LLMs from scratch:开启大语言模型的探索之旅》
  • “生成式AI大模型、多模态技术开发与应用”学习
  • 谈谈接口和抽象类有什么区别?
  • 在 WSL 安装 OpenFOAM-12
  • stone 3d v3.3.0版本发布,含时间线和连接器等新功能
  • Coding Practice,48天强训(22)
  • Nginx通过自定义参数,实现同一域名在不同设备下访问不同站点的操作
  • RefFormer论文精读
  • 【MySQL专栏】MySQL数据库的复合查询语句
  • 用 LangChain 手搓 RAG 系统:从原理到实战
  • [AI技术(二)]JSONRPC协议MCPRAGAgent
  • Cadence学习笔记之---原理图设计基本操作
  • ValidatorUtils工具
  • 《Piper》皮克斯技术解析:RIS系统与云渲染如何创造奥斯卡级动画短片
  • 【C语言练习】002. 理解C语言的基本语法结构
  • ECMAScript 1(ES1):JavaScript 的开端
  • 基于大牛直播SDK的Android屏幕扬声器采集推送RTMP技术解析
  • 远程控制、窃密、挖矿!我国境内捕获“银狐”木马病毒变种
  • 沈阳市委常委马原出任阜新市委副书记、市政府党组书记
  • 一周文化讲座|“不一样的社会观察”
  • 特朗普称已为俄乌问题设最后期限,届时美国态度或生变
  • 上海未来亚洲研究会第六届会员大会举行,叶青当选会长
  • 中国海警登临铁线礁开展维权行动并展示五星红旗