初学HTML:在线简易画板设计。

最近在HTML,记录下一点点成果。 设计了一个简易画板,通过HTML的Canvas元素实现一个在线画板,用户可以在上面绘制图形或涂鸦。

下面是运行效果:

下面是代码:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>绘图板</title>
    <style>
        #drawing-board {
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <h1>绘图板</h1>
    <canvas id="drawing-board" width="800" height="600"></canvas>

    <script>
        document.addEventListener("DOMContentLoaded", function(event) {
            var drawingBoard = document.getElementById("drawing-board");
            var context = drawingBoard.getContext("2d");
            var isDrawing = false;
            var lastX = 0;
            var lastY = 0;

            drawingBoard.addEventListener("mousedown", startDrawing);
            drawingBoard.addEventListener("mousemove", draw);
            drawingBoard.addEventListener("mouseup", stopDrawing);
            drawingBoard.addEventListener("mouseout", stopDrawing);

            function startDrawing(event) {
                isDrawing = true;
                [lastX, lastY] = [event.offsetX, event.offsetY];
            }

            function draw(event) {
                if (!isDrawing) return;
                context.beginPath();
                context.moveTo(lastX, lastY);
                context.lineTo(event.offsetX, event.offsetY);
                context.stroke();
                [lastX, lastY] = [event.offsetX, event.offsetY];
            }

            function stopDrawing() {
                isDrawing = false;
            }
        });
    </script>
</body>
</html>

这段代码会在浏览器中创建一个标题为"绘图板"的页面。页面顶部有一个 <h1> 元素,用于显示标题。画板使用 <canvas> 元素创建,并在CSS中定义了边框样式。

在JavaScript部分,使用事件监听器来响应鼠标按下、移动和释放的事件。当鼠标按下时,开始绘制路径;当鼠标移动时,继续绘制路径;当鼠标释放或离开画板时,停止绘制路径。使用 offsetXoffsetY 属性获取鼠标相对于画板的位置,并使用 context.beginPath()context.lineTo() 方法来绘制路径。

通过以上代码,可以在浏览器中运行,看到一个简易的在线画板。可以点击并拖动鼠标来自由绘制线条。

相关推荐
Liora_Yvonne6 分钟前
为什么你写了3年前端还是搭不好一个项目
前端·架构
snow@li7 分钟前
Java:后端项目会有一个类似前端node_modules的目录吗 / jar包在本地仓库 ~/.m2/repository 中按版本共存
java·开发语言·前端
weedsfly8 分钟前
单例模式在前端中的正确打开方式
前端·javascript·面试
PedroQue999 分钟前
uni-router新推useUniEventChannel,彻底解决页面通信难题
前端·uni-app
IT_陈寒9 分钟前
Vite冷启动快?我遇到了个奇怪的依赖问题
前端·人工智能·后端
2603_9552797011 分钟前
通过 brew upgrade cmake 升级到最新版本
前端
FREEDOM_X24 分钟前
Linux 进程间通讯(IPC)——总结
linux·c语言·前端·嵌入式硬件·struts
WWBQU1 小时前
前端day06
前端
岁月宁静1 小时前
DeepSeek Harness 团队 招聘 :JD反推:新手如何系统掌握AI Agent开发技术?
前端·人工智能·后端
小则又沐风a1 小时前
深入理解文件系统(二)
java·服务器·前端