Освоение объектной привязки в Fabric.js: введение в класс SnappyRect

Освоение объектной привязки в Fabric.js: введение в класс SnappyRect

18 мая 2023 г.

В мире веб-дизайна и разработки идеальное выравнивание объектов на холсте с точностью до пикселя имеет решающее значение для создания визуально привлекательных и совершенных пользовательских интерфейсов. Привязка объектов, позволяющая выравнивать объекты по заданным направляющим или другим объектам, играет жизненно важную роль в обеспечении точного позиционирования и интервалов.

Fabric.js, мощная и многофункциональная библиотека JavaScript для работы с холстом HTML5, предоставляет различные инструменты и функции для облегчения привязки объектов. В этой статье мы углубимся в концепцию привязки объектов и представим класс SnappyRect, пользовательскую реализацию, расширяющую функциональность Fabric.js.

А. Важность объектной привязки в веб-дизайне и разработке

При разработке пользовательских интерфейсов или работе над веб-проектами с большим количеством графики точное выравнивание элементов является ключом к достижению профессионального и визуально приятного результата. Привязка к объектам упрощает этот процесс, автоматически выравнивая объекты по определенным направляющим или соседним объектам, что упрощает поддержание постоянного расстояния и выравнивания.

Включив объектную привязку в свой рабочий процесс веб-дизайна, вы можете сэкономить драгоценное время, которое в противном случае было бы потрачено на ручную настройку и выравнивание объектов. Кроме того, привязка к объектам помогает обеспечить плавный и целостный пользовательский интерфейс, устраняя небольшие визуальные несоответствия, которые могут возникнуть из-за неправильного выравнивания элементов.

Б. Обзор класса SnappyRect в Fabric.js

Fabric.js предлагает широкий набор инструментов и утилит для обработка объектов холста. Тем не менее, в библиотеке нет встроенной функции привязки объектов. Чтобы преодолеть это ограничение, мы можем использовать гибкость Fabric.js для разработки нашей персонализированной системы привязки объектов.

Класс SnappyRect является расширением базового класса Fabric.Rect в Fabric.js. Он расширяет функциональность прямоугольного объекта, добавляя настраиваемые направляющие линии, помогающие привязывать объекты. Эти направляющие, представленные линиями, указывают на верхний, нижний, левый, правый, центральный горизонтальный и центральное вертикальное положение объекта SnappyRect.

В следующих разделах мы изучим внутреннюю работу класса SnappyRect и поймем, как он использует Fabric.js для создания и управления этими пользовательскими направляющими. Мы также узнаем, как интегрировать класс SnappyRect в наши проекты, что позволит нам добиться точной привязки объектов в наших приложениях на основе холста.

II. Понимание класса SnappyRect

В этом разделе мы рассмотрим структуру и внутреннюю работу класса SnappyRect. Понимание того, как реализован класс, поможет понять, как создаются настраиваемые направляющие для привязки объектов и управляются ими.

Полный код: https://github.com/dinesh-rawat- dev/fabricjs-prodeasy-snappy-rect

Демонстрация: https://codesandbox.io/ s/fabric-js-smart-guides-snappy-rect-z9xd67

А. Обзор структуры класса SnappyRect

Класс SnappyRect создается как расширение базового класса Fabric.Rect, предоставляемого Fabric.js. Он наследует все свойства и методы базового класса и добавляет специальные функции для объектной привязки.

const SnappyRect = fabric.util.createClass(fabric.Rect, {
  // Custom properties and methods go here
});

Б. Метод initialize и руководство по инициализации

Метод инициализации вызывается при создании нового экземпляра класса SnappyRect. Он переопределяет базовый метод инициализации для инициализации пользовательских свойств объекта SnappyRect. Одним из таких свойств являются направляющие, представляющие собой пустой объект, используемый для хранения ссылок на направляющие линии.

initialize: function(options) {
  options || (options = {});
  this.callSuper("initialize", options);
  this.guides = {};
},

С. Метод _render и визуализация руководства

Метод _render отвечает за визуализацию объекта SnappyRect на холсте. Он переопределяет базовый метод _render, чтобы настраиваемые направляющие отображались вместе с прямоугольной формой.

_render: function(ctx) {
  this.callSuper("_render", ctx);
  this._drawObjectGuides();
},

Д. Метод _drawObjectGuides и позиционирование направляющих

Метод _drawObjectGuides — это место, где происходит фактическое позиционирование и отрисовка направляющих линий. Он вычисляет ширину и высоту объекта SnappyRect и вызывает метод _drawGuide для каждой направляющей, передавая соответствующую позицию.

_drawObjectGuides: function() {
  const w = this.getScaledWidth();
  const h = this.getScaledHeight();
  this._drawGuide("top", this.top);
  this._drawGuide("left", this.left);
  this._drawGuide("centerX", this.left + w / 2);
  this._drawGuide("centerY", this.top + h / 2);
  this._drawGuide("right", this.left + w);
  this._drawGuide("bottom", this.top + h);
  this.setCoords();
},

Е. Метод _drawGuide и создание направляющих

Метод _drawGuide отвечает за создание и размещение отдельных направляющих линий на основе заданной стороны и положения. Он использует класс Fabric.Line для создания объекта линии, а объект lineProps определяет общие свойства, общие для всех направляющих линий.

_drawGuide: function(side, pos) {
  let ln;
  const color = "rgb(178, 207, 255)";
  const lineProps = {
    left: 0,
    top: 0,
    evented: true,
    stroke: color,
    selectable: false,
    opacity: 1
  };

  // Guide line creation based on side and position
  // ...

  if (this.guides[side] instanceof fabric.Line) {
    // Remove the existing line if it already exists
    this.canvas.remove(this.guides[side]);
    delete this.guides[side];
  }

  // Add the new guide line to the canvas
  this.guides[side] = ln;
  this.canvas.add(ln);
},

Ф. Управление обновлениями руководства и взаимодействиями

Чтобы убедиться, что направляющие обновляются и правильно взаимодействуют с объектом SnappyRect, необходимо реализовать различные методы и обработчики событий. Сюда могут входить методы для перетаскивания, обновления позиций и обработки преобразований объекта.

Эффективно управляя этими взаимодействиями с направляющими, класс SnappyRect обеспечивает точную привязку объектов к холсту, обеспечивая удобный пользовательский интерфейс при выравнивании и расположении объектов.

III. Использование класса SnappyRect

Чтобы использовать класс SnappyRect в своем коде, следуйте этим инструкциям:

1. Импортируйте класс SnappyRect:

import { SnappyRect } from "./fabric-guidelines";

2. Создайте экземпляр SnappyRect

указав необходимые параметры, такие как width, height, fill, top и влево:

var snappy = new SnappyRect({
  width: 150,
  height: 150,
  fill: "yellow",
  top: 10,
  left: 10
});

3. Добавьте объект SnappyRect на холст:

canvas.add(snappy).renderAll();

С помощью этих шагов вы успешно добавили объект SnappyRect на свой холст. Класс SnappyRect будет обрабатывать функции привязки и предоставлять интеллектуальные направляющие для точного выравнивания и позиционирования объекта.

В коде мы уже реализовали обработчики событий, такие как onObjectAdded, onObjectMoved и onObjectMoving. Эти обработчики событий инициируют необходимые действия при добавлении или перемещении объекта на холсте. Класс SnappyRect отвечает за рисование интеллектуальных направляющих и выполнение привязки.

Вы можете настроить внешний вид и поведение объекта SnappyRect, изменив параметры, переданные конструктору SnappyRect. Например, вы можете настроить ширину, высоту, цвет заливки, верхнее и левое положение в соответствии с вашими требованиями.

Не стесняйтесь экспериментировать с различными параметрами и тестировать поведение привязки объекта SnappyRect на холсте.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE