首页 > 其他分享 >初入 H5 Canvas 框架 Konva.js

初入 H5 Canvas 框架 Konva.js

时间:2023-07-23 23:25:38浏览次数:42  
标签:Layer const Konva Canvas js new 图层 Stage

什么是 Konva

Konva.js 是一个 H5 Canvas 的 JavaScript 框架,我们可以通过制作桌面端和移动端的 apps。

Konva 支持动画、转换、节点嵌套、图层、过滤、缓存、事件(桌面端和移动端)等。在 Konva 中,所有的图形都存在于 stage 中,即便是你的 app 使用了成百上千的 shapes(图形)也可以在 stage 中许多与图形对应的多个事件,以实现移动、缩放、旋转等功能。

Konva 的结构

              Stage
                |
         +------+------+
         |             |
       Layer         Layer
         |             |
   +-----+-----+     Shape
   |           |
 Group       Group
   |           |
   +       +---+---+
   |       |       |
Shape   Group    Shape
           |
           +
           |
         Shape

Stage(容器)

在 Konva 中,一切的开端始于 Konva.Stage 这个类,它包含了用户定义的 Konva.Layer,可以说 Stage 是 Konva 的容器,我们的图形都存在于这里面。

在 H5 中,Stage 表现为一个普通的 div 标签,例如,创建一个 Konva 容器:

file:[创建 Konva.Stage]
<body>
  <div id="container"></div>
  <script>
    // stage 是一个容器,装所有的 layer
    const stage = new Konva.Stage({
      container: "container", // id 选择器
      width: window.innerWidth,
      height: window.innerHeight
    });
  </script>
</body>

Layer(图层)

如上结构所示,Stage 下面有许多 Layer(图层),图层在 PS、绘画中很容易出现,我们可以理解图层中包含了许多的 Shapes(图形)、组(Group)。

入门示例

<body>
  <div id="container"></div>
  <script>
    // stage 是一个容器,装所有的 layer
    const stage = new Konva.Stage({
      container: "container",
      width: window.innerWidth,
      height: window.innerHeight
    });

    // 创建图层1
    const layer1 = new Konva.Layer();

    // 创建 rect1
    const rect1 = new Konva.Rect({
      x: 20,
      y: 20,
      width: 100,
      height: 50,
      fill: "green",
      stroke: "black",
      strokeWidth: 2
    });

    // 把 rect1 添加到图层1中,一个图层有许多的图形、组。
    layer1.add(rect1);

    const layer2 = new Konva.Layer();

    const rect2 = new Konva.Rect({
      x: 150,
      y: 40,
      width: 100,
      height: 50,
      fill: "red",
      shadowBlur: 10,
      cornerRadius: 10
    });

    layer2.add(rect2);

    const layer3 = new Konva.Layer();

    const rect3 = new Konva.Rect({
      x: 50,
      y: 120,
      width: 100,
      height: 100,
      fill: "blue",
      cornerRadius: [0, 10, 20, 30]
    });
    const rect4 = new Konva.Rect({
      x: 250,
      y: 150,
      width: 100,
      height: 100,
      fill: "#525288",
      cornerRadius: 5
    });

    layer3.add(rect3);
    layer3.add(rect4);

    // 把图层1、2、3添加到容器中
    stage.add(layer1);
    stage.add(layer2);
    stage.add(layer3);
  </script>
</body>

JS 代码解释

如上所示中,我创建了三个 Layer,每一个图层都有一个矩形(Shape),Layer 图层创建好了之后把它放入 Stage 中。

每一个图形都可以自定义样式,如圆角、填充颜色、宽度、高度等。

H5 结构解释

渲染结果

如上图所示,容器下面有三个 canvas 标签,正好对应了我们三个图层(Layer),图层中有自己的图形(Shape)。

标签:Layer,const,Konva,Canvas,js,new,图层,Stage
From: https://www.cnblogs.com/Himmelbleu/p/17576159.html

相关文章

  • nodejs sqlite报错 typeorm[ Expression tree is too large (maximum depth 1000)]
    最近在给公司开发一个工具时,使用SQLite,然后突然发现报错:(node:16195)UnhandledPromiseRejectionWarning:QueryFailedError:SQLITE_ERROR:Expressiontreeistoolarge(maximumdepth1000)athandler(/snapshot/server-work/node_modules/typeorm/driver/sqlite/Sql......
  • 如何将jsp中的值传到java代码中
    在JSP中,我们可以使用Java代码与HTML代码相结合,实现动态网页的开发。有时候我们需要将JSP页面中的值传递到后台的Java代码中进行处理,这时候可以通过以下几种方式实现。使用表单提交数据:我们可以在JSP页面中使用HTML的表单标签,通过表单的提交将值传递到后台的Java代码中。下面是一......
  • json-server
    前端必备技能:json-server全攻略在项目的初始阶段,后端提供的接口或数据可能是不完整的,作为一名前端开发工程师,不可避免的要使用mock的数据。如果此时的你不想使用简单的静态数据,而是想自己在本地启动一个server来模拟请求相关的操作,那么json-server是一个不错的选择。json-serve......
  • python将xml文件转换为json
    转载自:如何使用Python实现XML转JSON-知乎(zhihu.com)代码:importosimportjsonimportxmltodictdefxml_to_JSON(xml):#格式转换try:convertJson=xmltodict.parse(xml,encoding='utf-8')jsonStr=json.dumps(convertJson,indent=1)......
  • C#解析匿名JSON数据
    C#解析匿名JSON数据使用工具:Newtonsoft.Json使用方式://模拟数据varjsonData=JsonConvert.SerializeObject(new{Name="张三",Id=1,Age=18,UserName="123123"});JObjectjObject=JObject.Parse(jsonData);//解析数据varname=jObject["Name"......
  • Node.js下载安装教程
    一、下载安装包1、百度网盘自提链接:链接:https://pan.baidu.com/s/1Bbw895MtUgjlfZylPHCCxw 提取码:x89v 2、进入官网下载https://nodejs.org/zh-cn/download/选择对应版本,我这里选的windows64位版本 二、安装程序1、双击下载好的安装包,出现这个界面点【next】2、选......
  • node.js实现海报生成
    Node.js实现海报生成在现代社交媒体和电商平台上,海报是吸引用户注意力的重要元素之一。传统的海报制作通常需要专业的设计软件和设计师的技能。然而,通过使用Node.js,我们可以通过编程方式自动生成海报,从而节省时间和资源。什么是Node.js?Node.js是一个基于ChromeV8引擎的JavaScri......
  • node.js tinify
    了解Node.js中的tinify插件在Node.js中进行图像压缩是一个常见的需求,而tinify是一个流行的图像压缩工具,它提供了一个Node.js插件,用于对图像进行无损压缩。本文将向您介绍如何使用tinify插件,并提供一些示例代码。什么是tinify?tinify是一个由[tinypng](tinify提供了一个Node.js模......
  • node.js is only support
    Node.js的支持范围Node.js是一个基于ChromeV8引擎的JavaScript运行环境,旨在使JavaScript能够在服务器端运行。然而,尽管Node.js具有很多强大的功能和灵活性,但它并不支持所有JavaScript特性和API。在本文中,我们将探讨Node.js的一些特性和API的支持范围,以及一些可以使用的替代方案......
  • 老杜 JavaWeb 讲解(十三) ——JSP简单了解
    (十四)JSP相关视频:35-JSP原理深度解析36-JSP的各种基础语法37-JSP的输出语法第一个JSP程序在WEB-INF目录之外创建一个index.jsp文件,然后这个文件中没有任何内容。将上面的项目部署之后,启动服务器,打开浏览器,访问以下地址:http://localhost:8080/jsp/index.jsp展现......