p5.js 使用npm安装p5.js后如何使用?

news2024/11/24 11:49:54

本文简介

点赞 + 关注 + 收藏 = 学会了


在 《p5.js 光速入门》 中都是使用 CDN 的方式去使用 p5.js 的,不太符合当下的开发习惯。

不管是使用 Vue 还是 React,我们日常项目大部分应该都是使用脚手架的方式进行开发了,按照 《p5.js 光速入门》 的方式在 module 模式下使用 p5.js ,如果不出意外的话肯定是会出意外的!

所以,本文会把 《p5.js 光速入门》 缺省的 module 开发模式补全。



环境搭建

为了方便,我将使用 vite 搭建一个原生项目。

创建项目

# 1、创建项目
npm create vite@latest

# 2、项目命名
? Project name: » p5-demo

# 3、选择框架。这里选择 Vanilla 创建一个原生项目
? Select a framework: » - Use arrow-keys. Return to submit.
>   Vanilla
    Vue
    React
    Preact
    Lit
    Svelte
    Others

# 4、选择开发语言。我选了JS,你看自己需求进行选择吧
? Select a variant: » - Use arrow-keys. Return to submit.
>   JavaScript
    TypeScript

# 5、初始化并运行项目
  cd p5-demo
  npm install
  npm run dev

项目就这样创建出来了。


安装 p5.js

进入 p5-demo 项目后,使用以下命令安装 p5.js

npm install p5 --save

安装完成后再使用 npm run dev 运行项目。



创建画布

在创建画布前,需要先引入 p5.js。引入后可以尝试输出 p5.js 的版本。

打开 main.js 输入以下内容

import p5 from 'p5' // 引入 p5

console.log(p5.VERSION) // 输出当前使用 p5.js 的版本

打开浏览器的控制台可以看到当前使用的 p5.js 版本,在写本文时所用的是 v1.5.0

file


此时如果你打算像 《p5.js 光速入门》 那样直接使用 setup() 创建画布是不可能的了,因为在 module 模式下引入的 p5.jssetup() 方法并不会直接绑定到 window 上。

你可能会猜 p5.setup() 总可以了吧?

在控制台输出看看 console.log(p5.setup),会发现输出的是 undefined


好了,不饶了。

module 模式使用 p5.js ,需要这样写:

file

import p5 from 'p5'

let count = 0

const s = (sketch) => {
  sketch.setup = function() {
    sketch.createCanvas(400, 400) // 创建画布,传入画布尺寸
    sketch.background(120) // 设置画布背景色
  }

  sketch.draw = function() {
    let x = Math.sin(count) * 100 + 200
    let y = Math.cos(count) * 100 + 200
    sketch.circle(x, y, 50) // 创建圆形
    count += 0.1
  }
}

new p5(s)

这个例子中,我画了个圆形让它自己转圈圈。


module 模式下开发,可以使用 import p5 from 'p5' 的方式引入 p5.js

使用 new p5(sketch) 的方式创建 p5 程序。

sketch 是传入到 new p5() 的参数,这个参数是一个函数。正如上面的例子中,在这个函数中就可以使用 setup()draw() 等方法了。



将画布绑定到指定元素里

在使用 new p5() 创建出来的画布都是放在页面的尾部。

index.html 文件输入以下内容

<div id="app">
  <div>123</div>
  <div>456</div>
</div>
<script type="module" src="/main.js"></script>

main.js 文件输入以下内容

import p5 from 'p5'

const s = (sketch) => {
  sketch.setup = function() {
    sketch.createCanvas(400, 400)
    sketch.background(120)
  }
}

new p5(s)

file

打开浏览器可以看到,画布是绑定在页面的尾部的。


如果想将画布绑定在指定元素里,可以在 new p5() 方法里传入第二个参数,这个参数可以是元素的ID,也可以是元素本身。

比如:

index.html 文件输入以下内容

<div id="app">
  <div>123</div>
  <div id="palette"></div>
  <div>456</div>
</div>
<script type="module" src="/main.js"></script>

main.js 文件输入以下内容

import p5 from 'p5'

const s = (sketch) => {
  sketch.setup = function() {
    sketch.createCanvas(400, 400)
    sketch.background(120)
  }
}

new p5(s, 'palette')

此时再打开浏览器看看页面

file

此时画布就插入到指定元素里了。



推荐阅读

👍《p5.js 光速入门》

👍《Fabric.js 从入门到膨胀》

👍《console.log也能插图!!!》

👍《纯CSS 红砖背景墙》

👍《纯CSS:动态渐变背景【一分钟学会】》

👍《这18个网站能让你的页面背景炫酷起来》


点赞 + 关注 + 收藏 = 学会了 代码仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

互联网营销的基础方法

推广目的 1.让目标消费群在最短的时间内认知新产品的功能、效果,缩短新产品推广期的时间长度,尽快进入成长期,创造效益。 2.使目标消费群产生试用的欲 望,并逐步将其培育成品牌忠诚者。 3.提高品牌知名度和美誉度。 4.提高现场售点的产品的销量。 5.巩固通路经销商的客…

ARM64内存虚拟化分析(1)基础知识

1 两级转换 1.1 什么是stage2转换 Stage2转换允许hypervisor控制虚拟机VM中内存视图。它允许hypervisor控制一个虚拟机可以访问哪块内存映射的系统资源&#xff0c;以及这些资源应该出现在虚拟机地址空间的哪个位置。 这种控制内存访问的能力对于隔离是非常重要的。Stage2转换…

【C语言 全局 整形变量 布尔变量 数组变量 指针变量 结构体位域变量 枚举变量被其他.C文件相互访问】

【C语言 全局-> 整形变量 布尔变量 数组变量 指针变量 结构体位域变量 枚举变量被其他.C文件相互访问】【0】UI设计【1】项目概述【2】mainwindow.h头文件解析【3】头文件源码【4】mianwindow.c源文件解析【5】源文件源码【6】main文件解析源码【7】编译-链接-运行结果学完这…

对Java中String类的解释

文章目录一、String 的常用方法1.字符串的构造以及字符串常量池2.String 类中对象的比较3.字符串查找4.转化5.字符串替换6.字符串拆分7.字符串截取二、StringBuilder 和 StringBuffer1.引入两者的原因2.相关修改操作的介绍一、String 的常用方法 首先&#xff0c;在介绍 Strin…

[年终总结] 2023,希望一切都能够好起来

0. 引言 2022年&#xff0c;依旧是一个特殊的年份&#xff0c;从前年开始&#xff0c;我就开始撰写年终总结&#xff0c;感兴趣的大家可以看一看2020年终总结和2021年年终总结。 一年比一年过的快速&#xff0c;我也感觉到一年比一年过的更加珍惜。曾经以为自己尚且年轻&…

linux /dev/mapper/rhel-root分区扩容

命令查看linux内存占用情况 /dev/mapper/rhel-root分区已满&#xff0c;主要是东西太多&#xff0c;改善了也删了&#xff0c;但是还是不够用。在扩容之前在首先针对虚拟机硬盘进行扩展 接下来就是在linux上操作了 1、输入fdisk -l 这里显示我已经有了三个分区&#xff0c;sd…

ArcGIS基础实验操作100例--实验9线要素的延伸与裁剪

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验9 线要素的延伸与裁剪 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

qinglong-青龙面板部署

背景 之前服务器部署过 jd自动签到、刷豆的脚本&#xff0c;感觉还可以&#xff0c;薅羊毛每天1-2米左右&#xff0c;能把服务器成本薅回来&#xff0c;不过缺点不好管理&#xff0c;后面很久没人维护就凉了。最近了解到青龙面板能够很方便的维护这种脚本。所以部署了一下。 …

SQL学习笔记-聚合函数部分

鉴于自己最近在做后端开发的工作时&#xff0c;发现自己的SQL能力实在太差&#xff0c;开始学习SQL语句基础&#xff0c;学习过程中在本博客进行笔记记录&#xff0c;课程参考&#xff1a;SQL课程 聚合函数是一系列SQL内置的方法&#xff0c;能够完成一些非常使用的功能&#…

java输入语句怎么写

壹哥在前面给大家讲过&#xff0c;Java中给咱们提供了有三个标准的“流”&#xff0c;他们被统称为standard streams。除了负责输出的流之外&#xff0c;还有一个负责输入的标准流&#xff0c;Java中对应的API是System.in。 与标准输出相比&#xff0c;标准输入则复杂的多。尤…

OpenHarmony#深入浅出学习eTs/ArkUI#(一)模拟器/真机环境搭建

本项目的Gitee仓地址&#xff1a;深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) &#xff08;之前有些意外&#xff0c;数据丢失了&#xff0c;现在重新发&#xff0c;且不参与任何活动&#xff0c;在第一篇说明一下&#xff0c;之后就不再说明了&#xff09; 一、下载…

2022 年 11 种最佳移动自动化测试工具

移动应用程序开发正在以前所未有的速度增长&#xff0c;并且相应地需要使用正确的移动测试策略执行彻底的测试。这些策略主要涉及使用各种移动自动化测试工具。 移动测试工具可帮助企业自动化其应用程序测试&#xff0c;并减少额外的成本、时间和人为错误的机会。我们生活在一个…

用QT实现一个模型交互的网络请求

最近&#xff0c;我接收到了一个项目需求&#xff0c;具体内容如下&#xff1a; 具体要求&#xff1a; 1.交付给我程序的源代码即可&#xff0c;因为我要集成到我的大软件中&#xff0c;要求采用C和QT开发&#xff1b; 2.程序首先检测当前用户环境有没有联网&#xff0c;如果没…

linux的权限

前言 学习权限我们先理解一下xshell 我们使用Xshell的存在的意义 帮助进行命令行传递和返回结构保护操作系统 linux的权限 (1)权限的概念 限制人的&#xff0c;访问的对象可能没有这种“属性” 权限&#xff1a;一件事情是否运行被谁“做” 权限 人 事物属性 (2)linux的上…

【vector的各个begin迭代器详解】

前言 本文是熊猫练习stl一段时间之后&#xff0c;对vector容器的各种迭代器产生了很大的好奇心&#xff0c;于是对它们进行了以下探究。 从图中我们可以知道&#xff0c;vector一个有四组不同的迭代器&#xff0c; 其中&#xff0c;字符 ‘c’ 是 const 常量的意思&#xff0c…

严蔚敏 《数据结构C语言版》读书笔记

目录 第一章 线性表 顺序表 Sequence Table 带头双向循环链表 Linked List 第二章 栈和队列 栈 Stack &#xff08;顺序存储&#xff09; 检查括号是否匹配 队列 Queue &#xff08;链式存储&#xff09; 循环队列 Circle Queue 第三章 串 模拟实现string.h库函数 第…

2 面向对象编程

面向对象编程(OOP) **面向对象的程序(oop)**是由对象组成的&#xff0c; 每个对象包含对用户公开的特定功能部分和隐藏的实现部分。 传统的结构化程序设计通过**设计一系列的过程&#xff08;即算法&#xff09;**来求解问题。一旦确定了这些过程&#xff0c; 就要开始考虑存…

设备通过发放批量自注册场景体验【玩转华为云】

创建实例 首先&#xff0c;根据提示创建实例 实例名称实例描述 创建成功 可以看到&#xff0c;当前实例已经在运行中了 设备发放 在左侧列表中点击“设备发放” 功能简介 您可以通过“设备发放”轻松管理跨多区域&#xff0c;海量设备的发放工作&#xff0c;实现单点发放管…

.Net WebApi— SwaggerUI配置

最近新公司用了特别老的技术【Web 服务 .asmx文件 做WebService服务】&#xff0c;而WebApi早就流行四五年了&#xff1b; 实在太过于简陋&#xff0c;关键其他系统对接的同事&#xff0c;经常说对接不上&#xff0c;如果接口过多确实不方便接口管理&#xff0c;所以最终决定重…

基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备

文章目录一、前言二、系列文章三、解析&#xff1a;完整源码1. helloworld_amlogic_char_driver.c2. Makefile四、编译执行4.1 编译4.2 执行&#xff08;1&#xff09;部署&#xff08;2&#xff09;加载ko文件&#xff08;3&#xff09;查看结果&#xff08;4&#xff09;是否…