konvajs 相关问题

Konva是一个HTML5 Canvas JavaScript框架,支持桌面和移动应用程序的高性能动画,转换,节点嵌套,分层,过滤,缓存,事件处理。

为什么konva.js组被视为解决太多层问题的解决方案? 我正在使用NextJS和Konva建立数字音频工作站。我刚刚打了6层并收到了警告: Konva警告:舞台有6层。建议的最大层数为3-5。

Konva warning: The stage has 6 layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group.

回答 1 投票 0


在Konva中,如何将一定宽度转换为Shape

使用Konva(Konva-react),我使用此组件渲染行: const renderline =(PathProps:CanvasPath | ActivePath,key?:number)=>( 使用konva(konva-react),我使用此组件渲染行: const renderLine = (pathProps: CanvasPath | ActivePath, key?: number) => ( <Line key={key} points={pathProps.points} stroke={pathProps.tool === "eraser" ? ERASER_COLOR : STROKE_COLOR} strokeWidth={pathProps.strokeWidth} tension={0.5} lineCap="round" globalCompositeOperation={ pathProps.tool === "eraser" ? "destination-out" : "source-over" } /> ); 这是我的Mouseevent: const handleMouseMove = useCallback( (e: Konva.KonvaEventObject<MouseEvent | TouchEvent>) => { if (!activePath?.isDrawing) return; const pos = e.target.getStage()?.getPointerPosition(); if (!pos || !isPointInImage(pos.x, pos.y)) return; setActivePath({ ...activePath, points: [...activePath.points, pos.x, pos.y], }); }, [activePath, isPointInImage] ); const handleMouseUp = useCallback(() => { if (!activePath) return; const newPath: CanvasPath = { tool: activePath.tool, points: activePath.points, strokeWidth: activePath.strokeWidth, }; setPaths(newPaths); setActivePath(null); }, [activePath, paths]); NB:设定功能是React状态 我想要,在鼠标上,它将是一个单一的形状(或至少在同一层中形状),它保留了中风的宽度,无论是'x'和'i'。是否可以?因为,我的目标是: 创建可以通过另一种形状减去/切割的形状。 即使在单层的形状上使不透明度变得不透明,因此它不会重叠。 如果是在Adobe Illustrator中,该行为类似于expandtoshape。因此,它将采取行,将其转换为形状,并且将不再是可编辑的线路。 求助您采用与Adobe相同的方法,并为“展开形状”进行一些按钮,您可以制作自定义形状以替换已构造的路径形状。 自定义形状是Konva中的一流形状,这意味着它响应所有常规事件,Z index等。有关信息和示例,请参见Konva Docs。 customshape.scenefunc是您编码绘图命令的位置。

回答 1 投票 0


如何在KonvaJs中实现文本的深度效果(伪3D)

预期的3D效果: 代码: 预期的3D效果: 代码: <Group ref={mainRef} x={x} y={y} scaleX={scaleX} scaleY={scaleY} onTap={onTap} rotation={rotation} onClick={onTap} draggable onDragEnd={onDragEnd} onDragMove={onDragMove} onTransformEnd={onTransformEnd} > {[...Array(6)].map((_, i) => <Text text={letter} x={i} y={i} fontFamily="Bangers-Regular" fontSize={fontSize} stroke="red" strokeWidth={3} fill="red" fillPriority="color" />)} < Text ref={(ref) => onRender(ref)} text={letter} fontFamily="Bangers-Regular" fontSize={fontSize} stroke="blue" strokeWidth={3} fill="blue" fillPriority="color" /> </Group> 上面代码的结果: 与 在比较中可以看到,参考3D效果的质量要高得多,并且没有锯齿,理论上我可以通过增加副本数量获得更好的效果,但放大时看起来仍然更差。 参考来源:https://www.graffiti-empire.com/graffiti-generator/ 一个可能的解决方案是在规模增加时增加步数: import React from "react"; import { createRoot } from "react-dom/client"; import { Stage, Layer, Rect, Text, Circle, Line, Group } from "react-konva"; const App = () => { const [scale, setScale] = React.useState(1); return ( <> <input type="range" min="0.5" max="5" step="0.1" value={scale} onChange={() => { setScale(Number(event.target.value)); }} /> <Stage width={window.innerWidth} height={window.innerHeight}> <Layer> <Group draggable scaleX={scale} scaleY={scale}> {[...Array(Math.round(6 * scale))].map((_, i) => ( <Text text={"Hello"} x={i / scale} y={i / scale} stroke="red" strokeWidth={3} fill="red" fillPriority="color" fontSize={50} /> ))} <Text text={"Hello"} stroke="blue" strokeWidth={3} fill="blue" fillPriority="color" fontSize={50} /> </Group> </Layer> </Stage> </> ); }; const container = document.getElementById("root"); const root = createRoot(container); root.render(<App />); https://codesandbox.io/p/sandbox/react-konva-3d-text-fj5gg4 注意:创建很多层可能会严重损害性能。我建议如果可能的话缓存该组。

回答 1 投票 0

在画布中移动图像时如何避免拖尾

我正在使用 konvajs 创建一个画布,允许用户上传图像并移动/调整图像大小,他们还可以选择字体并添加一些文本。 然而,当我尝试移动图像时,它们会涂抹并留下......

回答 1 投票 0

fillPattern 在路径节点上的意外定位

我注意到,当我创建一个矩形并将其 fillPattern 设置为某个图像时,填充从矩形的左上角开始。 函数 addRectangle() { window.rect = new Konva.Rect({...

回答 1 投票 0

如何在变换过程中直观地调整 KonvaJS 矩形的边框半径?

我想在视觉上调整矩形的边框半径,因此它在变换过程中保持“相同”。 发生的情况是边界半径在变换过程中被拉伸,它......

回答 1 投票 0

在 KonvaJS 中按相对于其他点的位置将点添加到行

我正在使用Line绘制曲线(张力0.5)。假设该线已包含 3 个点。当我单击该线时,我想在该位置添加新点。我不明白的是我怎样才能...

回答 1 投票 0

如何使图层的高度和宽度与vue-konva中的舞台相同

我似乎无法找到直接的答案。我将 Konva 与 Vue 结合使用,我希望图层与舞台具有相同的宽度和高度。 我尝试用 width: var 更改图层宽度...

回答 1 投票 0

剪切层中的变压器未与工作区中的画布坐标对齐

说明: 当尝试在剪切层内创建工作空间时,我们遇到了一个问题,即转换器相对于剪切层的原点而不是ca...

回答 1 投票 0

Konva.js - 如何设置拖动限制以避免看到空白

我有一个代码,显示一张可以缩放和拖动的图片,但是拖动或缩放时,会看到白色背景。我想让它充当交互式地图,但不

回答 1 投票 0

React-konva 多选元素

从“react”导入React,{useEffect,useRef,useState}; 从“react-konva”导入{Circle,Layer,Rect,Stage,Transformer}; 从“konva”导入 Konva; 常量应用程序 = ...

回答 1 投票 0

需要导入ESM包(konva)。使用“导入”来引用包

从react-konva-utils导入Html时出现以下错误。我尝试过使用动态导入和标准导入来导入它。例如: 导出常量 Html = 动态( ()...

回答 2 投票 0

90度角画线算法

开门见山,我希望实现的是能够用这个形状在两个元素之间创建一条连接线: 数据库图.IO 当元素移动时,线条会重置,但始终

回答 1 投票 0

在html中绘制Konvajs容器舞台的边框边缘

我正在使用 Konvajs 库。我试图在主舞台元素周围放置一个边框框,但似乎无法使其工作。 CSS 仅适用于 ,Konva.Stage 元素不适用于 我正在使用 Konvajs 库。我试图在主 Stage 元素周围放置一个边框框,但似乎无法使其工作。 CSS 仅适用于 <div>,而 Konva.Stage 元素似乎没有这方面的特定属性。 在舞台层的 4 个边框上添加线条形状是唯一的方法吗? 我的 Konva 容器 <div class="TSPKonvaStage" id="KonvaContainer"></div> 下面是我的 Konva 宣言 var stage = new Konva.Stage({ container: 'KonvaContainer', // id of container <div> width: 600, height: 180 }); 您可以使用 CSS 作为容器元素: stage.getContainer().style.border = '1px solid black'. 这是对@lavrton 答案的实验。我很好奇舞台的大小是否被边界调整了。答案似乎是否定的——至少在 Chrome 上是这样。 // Set up the stage var stage1 = new Konva.Stage({container: 'container1', width: 300, height: 100}); // add a layer. var layer1 = new Konva.Layer(); stage1.add(layer1); console.log('Stage size before border=' + stage1.width() + ' x ' + stage1.height()); stage1.getContainer().style.border = '5px solid black'; console.log('Stage size after border=' + stage1.width() + ' x ' + stage1.height()); var rect1 = new Konva.Rect({x:0, y: 0, width: 50, height: 40, strokeWidth: 10, stroke: 'lime'}); layer1.add(rect1) stage1.draw() p { padding: 4px; } #container1 { display: inline-block; width: 500px; height: 200px; background-color: silver; overflow: hidden; } <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.rawgit.com/konvajs/konva/1.6.5/konva.min.js"></script> <p>This answers the question 'does the border reduce the size of the stage?'. Answer is no. The green rect appears with its left and top edges under the border - at least on Chrome. </p> <div id='container1'></div> var containerId = 'drawContainer'; var 容器 = document.getElementById(containerId); var width = 容器.offsetWidth; var height = 容器.offsetHeight; var stage = new Konva.Stage({ 容器:容器ID, 宽度:宽度, 高度: 高度 });

回答 3 投票 0

如何连接两个形状并表现得像一个形状?

Konvajs 如何连接两个形状并表现得像一个形状? 例如,我有两个像这样的 Konva.Text const 文本 = 新 Konva.Text({ text : '第一个文本', 填充:'蓝色' }); const text2 = 新 Konv...

回答 1 投票 0

跨层跨越 Konva 组

我试图在不同层的组中拥有不同的节点,但它似乎不起作用(可能是我的方法错误) 语境 我有一个对象层次结构,类似于

回答 1 投票 0

允许通过拖动移动元素,但仅限在一定范围内且有 Konva 的限制

所以我在我的React项目中使用react-konva制作一个画布,其中包含许多元素。 我希望允许人们拖动元素,但只能在一定范围内。例如,有...

回答 1 投票 0

Konva 形状与路径

我按照上下文菜单示例删除了一个形状,并且按预期工作。 我可以创建一个圆形或矩形,一切都按预期进行。 我遇到麻烦的地方是...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.