Создайте простое приложение для создания заметок 🔏
Учитесь на практике с помощью этого руководства для начинающих
Я люблю писать. Либо это для меня, либо для людей, делиться вещами здесь или в моей новостной рассылке, о коде или случайных вещах: это помогает мне очистить свой разум и записать то, о чем я думаю. Поскольку я всегда ищу новые проекты для улучшения своих навыков кодирования, я хотел сделать что-то, связанное с письмом: приложение для создания заметок.
Что-то, где вы могли бы писать, стилизовать и сохранять свои заметки.
- Напишите: введите то, о чем вы думаете.
- Стиль: как и в Medium, добавьте стиль к тексту (жирный, курсив…)
- Сохранить: автоматически сохраните свою работу, чтобы не потерять ее.
Создадим основную структуру
Это самая простая и короткая часть: она состоит в построении основной HTML-структуры вашей веб-страницы. По крайней мере, все, что следует за тегами !DOCTYPE
, head
и body
, ссылками CSS и JavaScript (на потом) и тегами meta
(как в каждом новом проекте).
Чтобы создать наш редактор, нам понадобятся только два div
, заголовок и содержимое. Дайте им текст внутри, чтобы вы могли видеть в своем браузере две строки текста. HTML5 великолепен, потому что с помощью всего одного атрибута он может сделать любой тег редактируемым. Передайте каждому из ваших div
атрибут contenteditable
со значением true
и обновите браузер. Если вы нажмете на один из ваших div
, теперь вы можете редактировать их содержимое!
На данный момент ваш код должен выглядеть так, как показано ниже, и этого достаточно, если вы хотите иметь очень простой текстовый редактор. Мы могли бы остановиться сейчас, поскольку у нас есть то, что мы хотим, но я думаю, что мы могли бы улучшить его, добавив больше функций!
... <div contenteditable="true">What I'm thinking about</div> <div contenteditable="true">Your deep thoughts...</div> ...
Сохраните свою работу
Пишите ли вы сообщения в блоге, случайные мысли или перечисляете идеи своих проектов, вы хотите, чтобы это было в безопасности! Я даже думаю, что вы никогда не должны удалять то, что вы пишете. Нам нужно, чтобы наше приложение автоматически сохраняло наш контент.
Давайте скажем браузеру сохранить ваши записи благодаря мощности JavaScript и localStorage
. Это функция API веб-хранилища, которая позволяет хранить данные локально в вашем браузере в течение неограниченного времени. Это означает, что даже если вы закроете вкладку или окно браузера, ваши данные останутся в безопасности и будут сохранены. Шаг за шагом, вот как это сделать:
- Нацельте свои два
div
(из части 1) в файл.js
(сquerySelector
) и сохраните ихinnerHTML
в новом экземпляреlocalStorage
. - Создайте функцию
save()
, которая обновляет содержимое, хранящееся в каждом экземпляреlocalStorage
. Это содержимое будет равно новомуinnerHTML
каждогоdiv
. - Создайте событие на ваших
div
s, которое запустит функцию сохранения. Я выбралonkeyup
, чтобы сохранять содержимое каждый раз, когда вы вводите новый символ. Добавьте его после объявления функции. Или прямо в файле HTML, добавив новый атрибут к вашимdiv
s:onkeyup="save()"
.
Итак, вот окончательный код для всей части сохранения:
// Set variables const editorTitle = document.querySelector('.title'); const editorContent = document.querySelector('.content'); const defaultTitle = 'What are you thinking about?'; const defaultContent = 'Let\'s write your deepest thougts...'; // Attribute localStorage values editorTitle.innerHTML = localStorage['title'] || defaultTitle; editorContent.innerHTML = localStorage['content'] || defaultContent; // Define the saving function let save = () => { localStorage['title'] = editorTitle.innerHTML; localStorage['content'] = editorContent.innerHTML; }; // Launch the function editorTitle.onkeyup = () => save(); editorContent.onkeyup = () => save();
Я воспользовался этим проектом, чтобы изучить и привыкнуть к новым функциям ES6, таким как функции
const
иlet
или=>
(вы можете многое узнать об этом в этой отличной публикации Zell Liew). Дайте мне знать, если какая-то часть моего кода должна быть улучшена!
Добавьте функции стиля
Базовый редактор, который у нас есть сейчас, работает, но вы согласитесь, что он все еще очень прост и может быть улучшен с помощью новых функций. Почему бы не добавить функции стиля? Жирный шрифт, курсив, подчеркивание кажутся красивыми и могут улучшить внешний вид ваших текстов!
Первым шагом для этого является создание меню с кнопками (столько, сколько элементов стиля у нас есть, в нашем случае три). После нажатия они будут применять стиль к выделенному тексту в вашем контенте. Я не говорю сейчас о CSS. Сначала заставьте это работать, а затем сделайте это красиво.
Я был удивлен, насколько легко было реализовать эти опции. JavaScript имеет встроенные функции, которые делают его очень простым и быстрым. В основном вам нужна только одна функция: execCommand()
. С помощью этой функции вы можете передавать параметры (полный список здесь), такие как bold
, copy
, createLink
… После вызова эта функция применит переданный параметр к выделенному тексту (вы даже не нужно сохранять этот текст, так как он определяется автоматически). Если текст не выбран, ничего не происходит. Вот полный, но очень краткий код этих функций стиля:
// Define your styling function let addStyle = (style) => { document.execCommand(style); }; // Call the function on click boldButton.onclick = () => addStyle('bold'); italicButton.onclick = () => addStyle('italic'); underlineButton.onclick = () => addStyle('underline');
Как и раньше, вы также можете вызывать функции непосредственно в HTML-теге: onclick="addStyle(’bold’)
.
Учитывая, что основные браузеры имеют свои собственные встроенные сочетания клавиш, нет необходимости создавать клавиатуру JavaScript для переопределения этих сочетаний клавиш (Ctrl/Cmd + B/U/I).
сделай это красиво
В этой части вы свободны: делайте все, что хотите, чтобы стилизовать свое приложение и сделать его красивым! Меня вдохновляют другие приложения для создания заметок, такие как Papier, Bear, Мобильные приложения Squarespace и Simplenote. Когда я разрабатывал приложение, я сосредоточился на следующих важных моментах:
- Я сделал его отзывчивым, чтобы одно и то же приложение можно было одинаково легко использовать на компьютере, планшете и мобильном телефоне.
- Я хотел чего-то очень простого и минималистского. Мне нравится оставаться сосредоточенным на своих письмах: отвлекаться нельзя.
Результат
Вы можете попробовать демо здесь: https://notes.quentin-bellanger.com. Итак, теперь у вас есть то, что:
- Позволяет вводить заметки с помощью
contenteditable
, стилизовать их с помощьюexecCommand
и сохранять локально с помощьюlocalStorage
. Это основные возможности простого текстового редактора. - Хорошо отображается во всех основных браузерах (кроме IE). Как вы можете видеть здесь, здесь и здесь, все функции (
contenteditable
,localStorage
,execCommand
) этого проекта поддерживаются большинством используемых браузеров, поэтому больших проблем с совместимостью нет. - Работает на любом устройстве, от компьютера до смартфона. Размер экрана не проблема, и приложение отзывчиво.
- Многому учит. Работа над этим проектом научила меня многому, в основном в JavaScript. Если вы потратите на это время, я надеюсь, вы также узнаете много нового. Если вы застряли, проверьте полный код в репозитории Github.
Это простой текстовый редактор, созданный как личный проект для изучения и улучшения моих навыков программирования. Я знаю, что есть возможные улучшения (например, как сказано в этой публикации, вероятно, есть лучшие и более оптимизированные решения для создания правильного редактора) и новые функции, такие как новые параметры редактора ( ссылка, заголовки, списки…), возможность загрузки заметок, ночной и/или полноэкранный режим…
Хорошее вдохновение для этого проекта исходит от Самая Шамдасани и его редакторского проекта на enlight.ml. Это отличное подспорье для начинающих. Проверьте это, если вы ищете небольшие проекты для начала. Также спасибо Arnaud Rinquin и LAURENT Romain за их ценную помощь в коде.
Спасибо, за то что прочитали эту статью. Вы можете комментировать (или отправить мне твит), если у вас есть вопросы или улучшения. И если вам понравилось, не стесняйтесь 💙 и поделитесь им с другими.