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

项目经理证怎么考取昆明seo排名外包

项目经理证怎么考取,昆明seo排名外包,广州网站建设推广,做慈善的网站文章目录 一、前言二、Konva.js 介绍三、创建 React 画板项目3.1 安装依赖3.2 创建 CanvasBoard 组件 四、增加画布控制功能4.1 清空画布4.2 撤销 & 重做功能 五、增加颜色和画笔大小选择5.1 选择颜色5.2 选择画笔大小 六、最终效果七、总结 一、前言 在线画板是许多应用&…

文章目录

  • 一、前言
  • 二、Konva.js 介绍
  • 三、创建 React 画板项目
    • 3.1 安装依赖
    • 3.2 创建 `CanvasBoard` 组件
  • 四、增加画布控制功能
    • 4.1 清空画布
    • 4.2 撤销 & 重做功能
  • 五、增加颜色和画笔大小选择
    • 5.1 选择颜色
    • 5.2 选择画笔大小
  • 六、最终效果
  • 七、总结

一、前言

在线画板是许多应用(如白板协作工具、手写笔记、绘图软件)中的重要组件。我们可以使用 React + Konva.js 结合 react-konva 来实现一个功能丰富的画板。

本教程将带你实现一个支持 自由绘制、清空画布、撤销/重做 的 React 画板组件。


二、Konva.js 介绍

Konva.js 是一个基于 Canvas API 的 2D 图形库,支持高性能的绘图操作,如路径、形状、文本、图片等。它具有以下优点:

  • 更高性能:相比 DOM 操作,Canvas 渲染更加流畅;
  • 提供丰富的图形 API(直线、多边形、贝塞尔曲线等);
  • 支持事件监听,如 clickdragtouch 等。

react-konva 是 Konva.js 的 React 封装库,使其可以在 React 中更方便地使用。


三、创建 React 画板项目

3.1 安装依赖

在 React 项目中,安装 react-konvakonva

{bash}
npm install react-konva konva
{bash}


3.2 创建 CanvasBoard 组件

新建 CanvasBoard.js,并使用 react-konva 组件创建一个可绘制的 Canvas。

// CanvasBoard.js
import React, { useRef, useState } from "react";
import { Stage, Layer, Line } from "react-konva";const CanvasBoard = () => {const [lines, setLines] = useState([]);const [isDrawing, setIsDrawing] = useState(false);const stageRef = useRef(null);// 开始绘制const handleMouseDown = (event) => {setIsDrawing(true);const { x, y } = event.target.getStage().getPointerPosition();setLines([...lines, { points: [x, y] }]);};// 画线const handleMouseMove = (event) => {if (!isDrawing) return;const { x, y } = event.target.getStage().getPointerPosition();const newLines = [...lines];newLines[newLines.length - 1].points.push(x, y);setLines(newLines);};// 结束绘制const handleMouseUp = () => {setIsDrawing(false);};return (<div><Stagewidth={800}height={500}ref={stageRef}onMouseDown={handleMouseDown}onMousemove={handleMouseMove}onMouseup={handleMouseUp}style={{ border: "1px solid #ccc", background: "#fff" }}><Layer>{lines.map((line, index) => (<Line key={index} points={line.points} stroke="black" strokeWidth={3} tension={0.5} lineCap="round" />))}</Layer></Stage></div>);
};export default CanvasBoard;

四、增加画布控制功能

4.1 清空画布

我们可以添加一个“清空”按钮,点击后清除所有线条。

const handleClearCanvas = () => {setLines([]);
};
{javascript}并在 `CanvasBoard` 组件中添加按钮:{javascript}
<button onClick={handleClearCanvas}>清空画布</button>

4.2 撤销 & 重做功能

为了实现 撤销/重做,我们需要一个状态栈来存储历史操作。

修改 CanvasBoard.js

const [history, setHistory] = useState([]);
const [redoStack, setRedoStack] = useState([]);const handleUndo = () => {if (lines.length > 0) {setRedoStack([...redoStack, lines[lines.length - 1]]);setLines(lines.slice(0, -1));}
};const handleRedo = () => {if (redoStack.length > 0) {setLines([...lines, redoStack[redoStack.length - 1]]);setRedoStack(redoStack.slice(0, -1));}
};

并在 CanvasBoard 组件中添加按钮:

<button onClick={handleUndo}>撤销</button>
<button onClick={handleRedo}>重做</button>

五、增加颜色和画笔大小选择

我们可以添加选择颜色和画笔大小的功能,使画板更丰富。

5.1 选择颜色

CanvasBoard.js 中添加颜色选择器:

const [color, setColor] = useState("black");<input type="color" value={color} onChange={(e) => setColor(e.target.value)} />

并修改 Line 组件,让它支持动态颜色:

<Line key={index} points={line.points} stroke={line.color || "black"} strokeWidth={3} />
{javascript}当鼠标按下时,将颜色存入 `lines`{javascript}
setLines([...lines, { points: [x, y], color }]);

5.2 选择画笔大小

CanvasBoard.js 添加画笔大小选择器:

const [strokeWidth, setStrokeWidth] = useState(3);<input type="range" min="1" max="10" value={strokeWidth} onChange={(e) => setStrokeWidth(e.target.value)} />
{javascript}修改 `Line` 组件,让它支持动态画笔大小:{javascript}
<Line key={index} points={line.points} stroke={line.color || "black"} strokeWidth={line.strokeWidth || 3} />

当鼠标按下时,将 strokeWidth 存入 lines

setLines([...lines, { points: [x, y], color, strokeWidth }]);

六、最终效果

最终,我们的在线画板具备以下功能:
✅ 支持自由绘制
✅ 支持清空画布
✅ 支持撤销/重做
✅ 支持颜色选择
✅ 支持画笔大小调整

你可以将 CanvasBoard 组件导入 App.js 进行测试:

// App.js
import React from "react";
import CanvasBoard from "./CanvasBoard";function App() {return (<div className="App"><h1>React 画板</h1><CanvasBoard /></div>);
}export default App;

七、总结

本篇文章介绍了如何使用 React + Konva 实现一个 在线画板组件,并添加了 撤销/重做、颜色选择、画笔大小调整 等功能。Konva 提供了高效的 Canvas API,使得 React 处理复杂的绘图操作变得更加轻松。

你可以在此基础上继续扩展,比如:

  • 添加橡皮擦功能
  • 支持图像导入与导出
  • 多人协作(结合 WebSocket)

到这里,这篇文章就和大家说再见啦!我的主页里还藏着很多 篇 前端 实战干货,感兴趣的话可以点击头像看看,说不定能找到你需要的解决方案~
创作这篇内容花了很多的功夫。如果它帮你解决了问题,或者带来了启发,欢迎:
点个赞❤️ 让更多人看到优质内容
关注「前端极客探险家」🚀 每周解锁新技巧
收藏文章⭐️ 方便随时查阅
📢 特别提醒:
转载请注明原文链接,商业合作请私信联系
感谢你的阅读!我们下篇文章再见~ 💕

在这里插入图片描述

http://www.dtcms.com/wzjs/57748.html

相关文章:

  • 深圳3d网站建设电商网站建设开发
  • 网站建设外包名词解释滕州网站建设优化
  • 天津市武清区网站建设长沙网站优化
  • 服务周到的上海网站建设公google服务框架
  • 网站开发与维护课程设计免费seo网站的工具
  • 自己做的网站别人怎么访问百度com百度一下你
  • 加盟网大全外贸seo优化
  • 什么网站教做美食电商网站
  • 购物网站seo镇江关键字优化品牌
  • 如何做设计网站页面设计市场调研的方法
  • 如何查到别人的网站做哪些竞价词哈尔滨百度搜索排名优化
  • 做任务 送科比网站seo整站排名
  • 如何把自己做的网站连上网必应bing国内版
  • 武冈网络推广厦门网站优化
  • 西安网站seo技术厂家seo网站排名软件
  • 做网站电脑需要配置很好吗5118站长工具
  • 网站设计收费网络运营团队
  • 织梦企业网站源码前端seo搜索引擎优化
  • wordpress 微信 登录界面优化大师下载旧版本安装
  • 购物网站的后台中国网评中国网评
  • wordpress网站如何播放视频播放器百度seo优化排名软件
  • 企业网站 开源关键词歌词林俊杰
  • 做自媒体要知道的网站十大免费无代码开发软件
  • 国外购物网站怎么做四川省最新疫情情况
  • 工程建设网站导航图高端企业网站建设
  • 做一网站要什么时候开始网站关键字优化价格
  • 可以做设计的网站广州百度推广电话
  • 焦作做网站最专业的公司seo搜索推广
  • 电脑卸载不了wordpressseo与网络推广的区别和联系
  • 学网站制作多少钱购物网站大全