Já assisti a aula de como importar bibliotecas como o jQuery ou outros arquivos js de nossa preferência, porém ainda não estou conseguindo importar uma biblioteca que eu utilizo, o p5.js
p5.js
é uma biblioteca para criar animações em um canvas como por exemplo para exibir um círculo preto na tela:
function setup() {
createCanvas(500, 500)
fill(0)
ellipse(100, 100, width / 2, height / 2)
}
Normalmente deixo a parte do código em um arquivo sketch.js
e o importo no index.html
juntamente com a biblioteca:
<!DOCTYPE html>
<html>
<head>
<script src="libraries/p5.min.js"></script>
<script src="sketch.js"></script>
</head>
<body>
</body>
</html>
Já que por padrão todas as funções estão em global namespace basta simplesmente chama-la, como em ellipse()
, que já funciona (desde que a biblioteca tenha sido referenciada no index.html
)
Além disso é preciso que as funções estejam dentro de alguma função principal, como é o caso de function setup()
onde por padrão, a biblioteca a chama como início do programa.
Ou em function draw()
que é uma função que fica em loop, onde cada interação é um frame na animação do canvas.
Eu gostaria de utilizar os recursos que a biblioteca oferece, dentro de seu respectivo canvas, porém este estando numa SPA utilizando o Vue, com por exemplo em uma página há o componente canvas e nele funciona os recursos oferecidos pela biblioteca.
O p5.js
permite que você atribua o canvas como o filho de algum elemento no DOM, especificando através de seu id, como por exemplo:
Em index.html
<!DOCTYPE html>
<html>
<head>
<script src="libraries/p5.min.js"></script>
<script src="sketch.js"></script>
</head>
<body>
<h1>Teste</h1>
<p id="meuCanvas">Aqui está o Canvas</p>
<p>Outro parágrafo</p>
</body>
</html>
E no sketch.js
fica assim:
function setup() {
let c = createCanvas(500, 500)
c.parent('#meuCanvas') // Definindo o pai do canvas
ellipse(100, 100, 250, 250)
}
Por mais que eu importe em main.js
, seja pelo arquivo próprio ou usando seu package
import './assets/p5.min.js'
import './assets/sketch.js'
O sketch.js
não reconhece a biblioteca, e assim todo código dentro dele não é executado. Então eu preciso saber como deixar o código em p5.min.js
global, de modo que qualquer outro arquivo js possa utilizar de suas funções.
Preciso que seja qualquer outro arquivo (ou se puder eu especificar os que quero) pois não crio apenas o sketch.js
, normalmente crio arquivos contendo classes ou mesmo outros que utilizam dos recursos da biblioteca.
Além disso preciso saber como atribuir o canvas à algum componente do Vue, para que assim eu possa posiciona-lo como desejar.
Alguns links que achei útil durante minha pesquisa mas ainda sim não consegui resolver:
- Global and instance mode
- Why can't I assign variables using p5 functions and variables before
setup()
? - Correct use of p5.js with ES6?
- Integrating other libraries
- Use Any Javascript Library With Vue.js
Por favor, me ajudem! Espero ter sido claro na minha dúvida, mas caso algo tenha ficado um pouco confuso, só dizer que eu tento explicar melhor.