首页 > 其他分享 >React实现画布——可绘制矩形和箭头

React实现画布——可绘制矩形和箭头

时间:2024-10-23 14:03:25浏览次数:4  
标签:画布 y2 const 元素 element React 箭头 x2 矩形

目录

本文将使用React、JSX、Rough.js实现一个简单的画布,可以绘制矩形和箭头。

思路

  • 每一个图形包括:绘制的类型、起点的x坐标、起点的y坐标、宽、高。调用rough的generator()函数传入图形信息进行绘制,其中对于箭头需要进一步处理:根据宽高确定终点,并且定义角度等生成箭头的另外两条短线。
  • 使用 React 的状态管理来跟踪当前拖动的元素和选中的元素类型。创建一个组件提供单选按钮供用户选择绘制的元素类型。添加画布元素:鼠标按下:创建新元素并开始拖动。鼠标抬起:结束拖动并保存元素状态。鼠标移动:更新当前元素的宽度和高度,实时反映在画布上。

代码

import React from "react";
import ReactDOM from "react-dom";
import rough from "roughjs/dist/rough.umd.js"; // 导入 Rough.js 库用于绘制粗糙图形

import "./styles.css";

var elements = []; // 定义一个数组用于存储绘制的元素

// 创建一个新元素的函数
function newElement(type, x, y) {
  const element = { // 定义元素对象
    type: type, // 元素类型
    x: x, // 元素的 x 坐标
    y: y, // 元素的 y 坐标
    width: 0, // 元素的宽度
    height: 0 // 元素的高度
  };
  generateShape(element); // 生成元素的形状
  return element; // 返回元素对象
}

// 旋转函数,围绕指定点旋转线段
function rotate(x1, y1, x2, y2, angle) {
  // 旋转公式:
  // 

标签:画布,y2,const,元素,element,React,箭头,x2,矩形
From: https://www.cnblogs.com/lushuang55/p/18496223

相关文章

  • React 类组件的生命周期
    React类组件的生命周期可以分成三个阶段:挂载(Mounting)阶段:当组件实例被创建并插入DOM中时,会调用的方法。更新(Updating)阶段:当组件的props或state发生变化时会调用的方法。卸载(Unmounting)阶段:当组件从DOM中移除时会调用的方法。以下是每个阶段典型的生命......
  • 【React系列三】—React学习历程的分享
    一、组件实例核心—Refs通过定义ref属性可以给标签添加标识字符串形式的Refs这种形式已经不再推荐使用,官方不建议使用https://zh-hans.legacy.reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs回调形式的Refs<scripttype="text/babel">classDemoe......
  • ReactOS寻找病返回最小StartingAddress所在结点。
    ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNode()函数文章目录ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNodeMmIterateFirstNode/*INCLUDES*****************************************************************/#incl......
  • ReactOS系统中MM_REGION结构体的声明
    ReactOS系统中MM_REGION结构体的声明ReactOS系统中MM_REGION结构体的声明文章目录ReactOS系统中MM_REGION结构体的声明MM_REGIONMM_REGIONtypedefstruct_MM_REGION{ULONGType;//MEM_COMMIT,MEM_RESERVEULONGProtect;//PAGE_READONLYY,PAGE_READ_WR......
  • ReactOS系统中EPROCESS结构体的声明
    ReactOS系统中EPROCESS结构体的声明ReactOS系统中EPROCESS结构体的声明文章目录ReactOS系统中EPROCESS结构体的声明EPROCESSEPROCESS////ExecutiveProcess(EPROCESS)//typedefstruct_EPROCESS{KPROCESSPcb;EX_PUSH_LOCKProcessLock;LA......
  • 【React】高阶函数运用(附代码)
    在React中,使用高阶组件(Higher-OrderComponent,HOC)是一种常见的设计模式,用于增强组件的功能。那么在实际中我们会在何时用到呢?我们设计组件的目标是为了极大的解决业务使用问题,使用便利性和可扩展性则是我们设计组件的最大目标!比如一个简单的场景,需要我们开发一个对话框,该......
  • Taro 鸿蒙技术内幕系列(一):如何将 React 代码跑在 ArkUI 上
    作者:京东零售朱鸣辉   基于Taro打造的京东鸿蒙APP已跟随鸿蒙Next系统公测,本系列文章将深入解析Taro如何实现使用React开发高性能鸿蒙应用的技术内幕背景随着鸿蒙操作系统的快速发展,开发者们期待将现有跨平台应用迁移到鸿蒙平台。Taro作为一个流行的跨平台开......
  • React和Vue哪个更适合前端开发
    在前端开发领域,React和Vue一直是两大热门框架。本文深入对比两者在不同维度的表现,包括:1.设计理念和学习曲线;2.数据绑定;3.组件化;4.生态系统和工具;5.性能;6.社区支持;7.企业采用和工作机会。通过全面的比较分析,我们可以发现React和Vue各有优势,选择哪一个框架更多地取决于项目......
  • React入门实例:井字棋
    下面是一个官方教程的实例,实现井字棋且可以回到任意一步。这个实例可以接触到React概念,包括元素、组件、props和state。详细每一步中文官方地址:https://zh-hans.react.dev/learn/tutorial-tic-tac-toe代码import{useState}from'react';import'./App.css';//Squar......
  • React项目中的antd,Form和Table如何一起使用
    React项目中的antd,Form和Table如何一起使用在项目中我们可能会遇到单独的表格,单独的表单这样使用。但是稍微复杂一点,如果是表单中存在一个类似于表格的列表,我们能够动态的去增加删除。或者是表格中的每一行中的某一列或者多个列是表单信息,那么我们又应该怎么实现呢?const[toForm......