Для использования Paper.js необходимо подключить библиотеку через
<script> тег или через менеджер пакетов, например
npm. При подключении через HTML достаточно добавить:
<script type="text/javascript" src="https://unpkg.com/paper/dist/paper-full.min.js"></script>
<canvas id="myCanvas" resize></canvas>
При подключении через npm:
npm install paper
import paper from 'paper';
const canvas = document.getElementById('myCanvas');
paper.setup(canvas);
Ключевой момент: paper.setup(canvas)
связывает библиотеку с конкретным элементом <canvas>,
после чего все объекты Paper.js будут отрисовываться на этом холсте.
Paper.js хорошо интегрируется с другими JavaScript-библиотеками для работы с графикой и анимацией. Наиболее часто используются:
import { gsap } from 'gsap';
const circle = new paper.Path.Circle({
center: [150, 150],
radius: 50,
fillColor: 'blue'
});
gsap.to(circle.position, { x: 400, duration: 2, ease: "power1.inOut" });
import TWEEN from '@tweenjs/tween.js';
let circle = new paper.Path.Circle(new paper.Point(100, 100), 40);
let tween = new TWEEN.Tween(circle.position)
.to({ x: 300, y: 300 }, 1000)
.start();
import { Howl } from 'howler';
const sound = new Howl({ src: ['sound.mp3'] });
sound.play();
Совет: при объединении Paper.js и сторонних
библиотек важно обновлять Paper.js сцены через view.onFrame
или вручную вызывать view.update() для корректной
анимации.
Paper.js может использоваться вместе с современными фронтенд-фреймворками:
import React, { useEffect, useRef } from 'react';
import paper from 'paper';
function PaperCanvas() {
const canvasRef = useRef(null);
useEffect(() => {
paper.setup(canvasRef.current);
const circle = new paper.Path.Circle({
center: [100, 100],
radius: 50,
fillColor: 'red'
});
paper.view.draw();
}, []);
return <canvas ref={canvasRef} resize="true"></canvas>;
}
v-paper или внутри mounted
хука.mounted() {
const canvas = this.$refs.myCanvas;
paper.setup(canvas);
let path = new paper.Path.Rectangle([50, 50], [100, 100]);
path.fillColor = 'green';
}
project.exportSVG()
для получения SVG и последующего импорта.Paper.js поддерживает интеграцию с данными из API, JSON и других форматов:
paper.project.importSVG('<svg><circle cx="50" cy="50" r="40" /></svg>', function(item) {
item.fillColor = 'orange';
});
fetch('data/shapes.json')
.then(res => res.json())
.then(data => {
data.shapes.forEach(shape => {
new paper.Path.Circle({ center: shape.center, radius: shape.radius, fillColor: shape.color });
});
});
CanvasRenderingContext2D для сложных
эффектов, например фильтров или pixel-эффектов.const ctx = canvas.getContext('2d');
paper.view.onFr ame = () => {
ctx.globalAlpha = 0.5;
ctx.drawImage(canvas, 0, 0);
};
Paper.js имеет гибкую архитектуру для создания пользовательских модулей и расширений:
class AnimatedCircle extends paper.Path.Circle {
constructor(center, radius, color) {
super({ center, radius, fillColor: color });
}
pulse() {
const scaleFactor = 1.1;
this.scale(scaleFactor);
setTimeout(() => this.scale(1/scaleFactor), 500);
}
}
const circle = new AnimatedCircle([150, 150], 40, 'purple');
circle.onMouseEn ter = () => circle.fillColor = 'yellow';
circle.onMouseLe ave = () => circle.fillColor = 'purple';
shapes.js,
animations.js, interactions.js, импортируя их
в основной скрипт через ES6-модули.Paper.js можно интегрировать с реальными потоками данных, что позволяет создавать динамическую визуализацию:
const socket = new WebSocket('ws://localhost:8080');
socket.onmess age = function(event) {
const data = JSON.parse(event.data);
paper.project.activeLayer.removeChildren();
data.points.forEach(point => {
new paper.Path.Circle({ center: point, radius: 5, fillColor: 'red' });
});
};
Такой подход применяется для визуализации координат, графиков, интерактивных диаграмм в реальном времени.
view.onFrame как основной цикл
рендеринга.Layer) для разных типов объектов, облегчая управление и
анимацию.importSVG, а не
вручную рисовать фигуры, чтобы сохранить совместимость с внешними
редакторами.