Java, UX, HTML, CSS, WEB-design

Подробное введение в пользовательские элементы

[ad_1]

  • Питер Гастон

  • 0 Комментарии

Подробное введение в пользовательские элементы

  • 9 минут чтения

  • Кодирование, JavaScript, веб-компоненты

Краткое резюме ↬

Веб-компоненты — это набор связанных технологий, предназначенных для повторного использования элементов в Интернете. Львиная доля разговоров была посвящена Shadow DOM, но, вероятно, самой преобразующей технологией пакета являются пользовательские элементы. метод определения собственных элементовсо своим поведением и свойствами.

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

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

Еще после прыжка! Продолжить чтение ниже ↓

«Какой смысл в пользовательских элементах?»

Основная идея заключается в том, что если вы создаете элемент, который всегда выполняет одну и ту же роль и имеет один и тот же набор свойств и функций, применяемых к нему, вы должны иметь возможность назвать его в соответствии с тем, что он делает. У нас есть video элемент для отображения видео, select элемент для отображения поля выбора, img элемент для отображения изображений (и избавляет нас от необходимости вводить два символа всякий раз, когда мы его пишем). Многие элементы описывают свою собственную функцию.

Но Интернету сегодня приходится делать гораздо больше работы, чем раньше, и HTML не всегда успевает за скоростью изменений. Таким образом, пользовательские элементы дают нам, разработчикам, гибкость для создания элементов на основе их функций и предоставляют нам низкоуровневый доступ для определения их свойств.

Если созданные нами элементы станут общепризнанными, они могут стать полностью стандартизированной частью будущей спецификации HTML. То, что мы делаем, может определить будущее того, что мы делаем.

«Но разве мы не можем прямо сейчас создавать собственные элементы в HTML?»

Ты прав, воображаемый читатель, мы можем. Это отвратительно легко. Просто откройте свой любимый текстовый редактор и создайте элемент в HTML-документе, например:


<apes>…</apes>

Откройте его в браузере. Оно работает. Вы можете стилизовать его, прикрепить к нему события JavaScript. Это может быть не «действительно» (кого это волнует в наши дни, верно, дети?), но это работает. Вы можете сделать это с любым именем, которое вам нравится, и это создаст новый встроенный элемент.

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

«Легко ли создавать пользовательские элементы?»

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


<great-apes>…</great-apes>

Когда вы определились с именем, следующий шаг — зарегистрировать его в DOM, что делается путем передачи имени в качестве аргумента в JavaScript. registerElement() метод, например:


document.registerElement('great-apes');

Теперь DOM распознает ваш вновь зарегистрированный great-apes элемент и может начаться настоящее веселье. Кстати, чтобы еще больше запутать терминологию, созданный таким образом элемент, не определенный в спецификации HTML, известен как «настраиваемый тег», так что не удивляйтесь, если я буду использовать этот термин.

«Я до сих пор не понимаю, в чем дело»

Потерпи меня, нетерпеливый мыслящий читатель. Большая разница между тщедушными пользовательскими элементами и мощными пользовательскими тегами (надеюсь, вы не удивлены, что я использую этот термин) заключается в интерфейсе, доступном для DOM. Пользовательские элементы, незарегистрированные и нераспознанные, используют HTMLUnknownElement интерфейс, тогда как зарегистрированные и распознанные пользовательские теги используют HTMLElement интерфейс.

Какая разница? С HTMLElement, мы можем добавить свои собственные методы и свойства, создав, по сути, API для каждого элемента. Подождите, я преуменьшил, насколько это удивительно: поэлементный API!!! Да, у каждого пользовательского тега может быть свой собственный API.

Чтобы инициировать это, вы должны сначала определить новый прототип, а затем прикрепить к нему свои свойства и методы. В этом примере я создаю метод с именем hoot() который записывает сообщение в консоль:


var apeProto = Object.create(HTMLElement.prototype);
apeProto.hoot = function() {
  console.log('Apes are great!');
}

Следующим шагом будет регистрация элемента, как и раньше, только на этот раз с добавлением аргумента в опции registerElement() чтобы указать, что он должен использовать наш недавно определенный прототип:


document.registerElement('great-apes', {prototype: apeProto});

Когда это будет сделано, вы можете запросить свой элемент в DOM и вызвать метод:


var apes = document.querySelector('great-apes');
apes.hoot();

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

В качестве быстрого примера того, насколько исключительно полезными могут быть пользовательские элементы, см. статью Эдуардо Лундгрена. google-maps элемент, который встраивает карту Google и может иметь параметры, передаваемые через значения атрибутов, например:


<google-maps latitude="-8.034881" longitude="-34.918377"></google-maps>

«Можно ли расширить существующие элементы для использования этого API?»

Ничего себе, вы действительно задаете самые удобные вопросы. Да, захватывающе, мы может создавать пользовательские элементы, которые расширяют существующие элементы. Да, мы можем создать совершенно новый API для существующих элементов HTML! Я знаю, это звучит как бред сумасшедшего, верно? Но это правда!

В качестве примера создадим таблицу с нашим hoot() метод прилагается. Для этого мы проделаем все шаги из предыдущего раздела, а затем добавим небольшой новый аргумент в опции registerElement() метод, а ля:


document.registerElement('great-apes', {
  prototype: apeProto,
  extends: 'table'
});

Значение extends Аргумент информирует DOM о том, что пользовательский элемент предназначен для расширения table элемент. Теперь мы должны сделать table элемент сообщает DOM, что он хочет быть расширен, используя is атрибут:


<table is="great-apes">…</table>

скромный table элемент теперь может иметь свой собственный API. Например, он может запрашивать свои собственные данные в стандартизированном интерфейсе. Таблица, у которой есть API для запроса собственных данных!!! Как можно не быть взволнованным этим?

Для реального примера расширенного элемента взгляните на Эдуардо Лундгрена. video-cameraчто расширяет video элемент для использования живого ввода из getUserMedia():


<video is="video-camera"></video>

«Хорошо, это круто. Что еще?»

Набор событий обратного вызова (с блестяще прозаическими именами) запускается на протяжении всего жизненного цикла пользовательских событий: когда создается элемент (createdCallback), прикрепленный к DOM (attachedCallback) или отсоединен от DOM (detachedCallback) или при изменении атрибута (attributeChangedCallback). Например, чтобы запускать анонимную функцию каждый раз, когда на странице создается новый экземпляр пользовательского тега, вы должны использовать это:


apeProto.createdCallback = function () {…};

«Как пользовательские элементы работают с другими функциями веб-компонентов?»

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


<great-apes>
  <template>…</template>
</great-apes>

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

Если вы еще не знакомы ни с одной из этих технологий, не волнуйтесь: пользовательские элементы также отлично работают сами по себе.

«Могу ли я использовать пользовательские элементы сегодня?»

Ну нет. И да. Это не просто какие-то фантастические концепции; производители браузеров уже работают над ними: в последних версиях Chrome и Opera реализована registerElement() метод, и он также недавно появился в Firefox Nightly. Но необработанные пользовательские элементы еще не готовы к использованию в производстве.

Гориллы - человекообразные обезьяны... Смотри, это было либо это, либо скриншот какого-то JavaScript.
Гориллы — человекообразные обезьяны… Смотри, это было либо это, либо скриншот с еще большим количеством кода JavaScript. (Изображение предоставлено: Марике Эйсендорн-Кёйперс)

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

Рекомендуемая литература: Применение лучших практик в компонентных системах

Если вы вообще заинтересованы в пользовательских элементах — а поскольку вы дочитали эту статью почти до конца, я полагаю, что вы, вероятно, заинтересованы — тогда Polymer — ваш лучший вариант для обучения и создания.

«Что насчет доступности?»

Ах, мысленный читатель, вот и я. Использование пользовательских элементов связано с одним большим предостережением: Требуется JavaScript. Без него ваш новый элемент просто не будет работать и превратится в старый добрый элемент. HTMLUnknownElement. Если ваш элемент не будет изначально принят браузерами, обойти это просто невозможно. Просто запланируйте изящный запасной вариант, как вы должны делать с JavaScript в любом случае.

Что касается дальнейшей доступности, это действительно зависит от вас. Я настоятельно рекомендую добавить роли и атрибуты ARIA к вашим пользовательским элементам, так же, как сегодня это элементы пользовательского интерфейса браузера по умолчанию, чтобы гарантировать, что каждый получит первоклассный опыт работы с ними.

«Куда мне идти дальше?»

Домой, чтобы хорошенько полежать. Или, если вы предпочитаете продолжить чтение о пользовательских элементах, попробуйте некоторые из этих ссылок:

  • Polymer. Это проект, о котором я говорил три абзаца назад. Тебе действительно нужно, чтобы я объяснил это снова?
  • Пользовательские элементы Это галерея веб-компонентов, принадлежащая сообществу.
  • «Пользовательские элементы: определение новых элементов в HTML», Эрик Бидельман, HTML5 Rocks. Статья Бидельмана оказала мне неоценимую помощь при написании этой статьи.
  • «Пользовательские элементы», W3C. Спецификация довольно непонятна, но, возможно, вы извлечете из нее больше, чем я.

(Огромное спасибо Эдди Османи и Брюсу Лоусону за их отзывы во время написания этой статьи.)

Сокрушительная редакция
(ал, иль)

Авторы изображения на обложке: Дмитрий Барановский.



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Подробное введение в пользовательские элементы

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован.

Краткое описание по статье Подробное введение в пользовательские элементы

Название: Подробное введение в пользовательские элементы . Краткое описание: [ad_1] ⭐ Питер Г . Дата публикации: 11.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

Кнопка «Наверх»