Автор оригинала: FreeCodeCamp Community Member.
Avanthika Meenakshi
Если вы находитесь в середине учебного реагирования, вы, вероятно, уже проходили много учебных пособий о том, как построить список дел. В какой-то момент вы будете искать альтернативные идеи, чтобы попробовать и учиться, но вы будете следить за разными версиями приведенного вами списка дефолта.
Эта альтернативная идея в этой статье для вас, интересные. Кодовая база можно найти в моем github, и он загружается с Create-React-App Отказ Я собрал шаблоны Meme-шаблонов из Google и других источников. Влияние Шрифт может сделать любое изображение мем, поэтому у нас нет выбора, кроме как добавить его.
Это хороший проект Do-and-Project для начала. Мы будем иметь дело со многими слушателями/пользовательскими взаимодействиями и государственными мутациями.
Создание галереи
Первоначально мы будем создавать галерею изображений, чтобы пользователи выбрали мем-шаблон. Я сохранил изображения, которые я собрал как массив, и я создающую из нее простую галерею.
В следующем коде
- Мы рассмотрим через массив фотографий, показать каждый шаблон MEME-шаблон в теге IMG и отобразить галерею.
- Мы определяем текущее выбранное изображение через OnClick на теге IMG.
- У нас есть инициальный объект с первоначальными настройками подписи и их позиционирование. Положение, содержание и сопротивление верхних и нижних текстов могут быть позже модифицированы путем запуска мутаций состояния.
Как вы можете расшифровать, каждое изображение в галерее получило собственное событие OnClick. Он находит отобранное изображение, преобразует его на Данные URI и открывает Реагнийный модал Отказ Модаль будет рабочей станцией для создания мема.
Рабочая станция Meme-Maker
Мы используем SVG , изображение и текст Теги внутри модала для удержания изображения и мем-заголовок. Мы предпочитаем SVG, потому что вы можете увеличить масштабирование, сколько вам нравится, и он никогда не потеряет ясности. И преобразование SVG в PNG при экспорте мема относительно простая задача.
Каждое изображение в коллекции имеет разную высоту и ширину. Чтобы избежать растяжения и сжимания изображения, я делаю небольшой обходной путь, чтобы исправить соотношение сторон. Я устанавливаю ширину до 600 и вычисляю высоту на основе соотношения высоты ширины. Я снабжу расчетную высоту и ширину в SVG.
Общая структура внутри SVG довольно проста. Он держит изображение и подписи.
Координаты X и Y верхней и снизу <Текст /> Теги поддерживаются в состоянии (см. Инициальный объект в компоненте Memememaker). Как пользователь перетаскивает и позиционирует текстовые теги, изменять координаты X и Y координат.
Примечание: XLinkHref Image Tag будет встроен (Base64) путь. Сырые URL-адреса SRC не могут быть преобразованы в PNG при загрузке.
Вот как выглядит весь код:
Кроме SVG, у нас есть два <ввода /> ; Теги, чтобы позволить пользователю вводить свои верхние и нижние подписи для мем Отказ На Изменение события захватывает верхнюю заголовок и нижнюю заголовок и устанавливает их в состояние, как и когда мы его меняем.
Перетаскивая текст вокруг!
Давайте попробуем повторно расположение верхних и нижних подписи сейчас. Перетаскивание взаимодействия текстовых тегов привязаны к слушателям событий.
- Нажмите на мышь – OnMousedown – Находит выбранный текстовый тег, определяет текущие позиции X и Y, и прикрепляет прослушиватель событий «MouseMove».
- Mouse Move – OnMouseMove – Находит текущую позицию (X и Y) текстового тега, так как мышь удерживается и перемещается.
- Выпуск мыши – onmouseup – Находит положение падения или позицию выпуска. Определяет X и Y, где текст упал. Удаляет слушатель события «MouseMove» из элемента и завершает перетаскивание.
Отслеживать мыши, удерживайте и перетащите. Мы включаем следующие слушатели событий в текстовые теги.
onMouseDown={event => this.handleMouseDown(event, 'top')}onMouseUp={event => this.handleMouseUp(event, 'top')}
Затем мы прикрепляем слушатель события «MouseMove», чтобы отследить движения мыши на «Mousedown». После того, как текстовый тег отброшен, мы удаляем прикрепленную прослушиватель событий Mews Move в «мышев».
Вот как код делает это:
Теперь, когда перетаскивание сделано, вы можете переместить текст и пересмотреть его, где вы хотите.
Загрузка мема
Когда пользователь нажимает кнопку «Загрузить», мы преобразуем SVG на сериализованную строку XML и рисуя его в HTML5 Canvas Отказ Мы используем метод ToDataurl () HTML Canvas (генерирует URI image Base64) для генерации изображения MIME MIME MIME) «Изображение/PNG»!
Как вы узнаете больше, есть гораздо больше, вы можете сделать с этим маленьким проектом.
- Вы можете попытаться извлечь изображения из API с открытым исходным кодом и построить галерею.
- Вы можете попытаться добавить положения, чтобы поделиться с ними в Facebook, WhatsApp и Twitter.
- Вы можете попробовать позволить пользователю загружать свое собственное изображение, масштабировать его и создать мем.
- Вы можете попробовать размер шрифта.
Вы можете сделать гораздо больше, чтобы улучшить проект, который в конечном итоге улучшит ваши навыки кодирования. ? Счастливое кодирование! ?