SlideShare a Scribd company logo
Дополнительные
возможности в DOM
Курс Frontend-разработки на Javascript + Vue/React
Работа с аудио/видео
• Работа с аудио или видео, встроенными по стандарту HTML5,
сводится к работе с DOM-элементами соответствующего тега
<audio> или <video>.
• На базе DOM-элемента аудио или видео разработчики строят
собственные стилизованные плееры. Стилизовать базовый
браузерный плеер при помощи CSS не представляется возможным.
События медийных тегов
Событие Описание
canplay Возникает, когда медиа готово к воспроизведению.
play Возникает, когда медиа начинает воспроизводиться.
pause Возникает, когда медиа было поставлено на паузу
timeupdate Возникает, когда изменилось текущее время медиа
ended Возникает, когда воспроизведение медиа дошло до конца
error Возникает в случаях, когда при воспроизведении возникла ошибка
loadedmetadata Возникает, когда для медиа были загружены метаданные (в частности,
длительность)
Свойства и методы медийных
тегов
Свойство/метод Тип значения Описание
.currentTime Дробное число Текущее время воспроизведения медиа в секундах. Можно перезаписать.
.duration Дробное число Только для чтения. Длительность медиа в секундах.
.ended Boolean Только для чтения. Указывает, закончилось ли воспроизведение.
.loop Boolean Если задать true, то воспроизведение будет зациклено.
.muted Boolean При задании значения true отключает звук в медиа.
.paused Boolean Только для чтения. Вернет true если медиа было поставлено на паузу.
.playbackRate Дробное число Скорость воспроизведения, по умолчанию = 1. Можно задать другие
значения для ускорения/замедления воспроизведения.
.src Строка Адрес текущего медиа. Можно перезаписать.
.volume Дробное число от 0 до 1 Громкость воспроизведения медиа.
.pause() - Запускает приостановление видео на паузу.
.play() - Запускает воспроизведение видео (асинхронно).
Задача 1.
• Создать видеоплеер со следующими возможностями:
• Пауза/продолжение и стоп
• Перемотка позиции
• Изменение громкости воспроизведения
• Изменение скорости воспроизведения
• Создать видеогалерею из нескольких видео, при клике – отправлять
видео, на которое кликнул пользователь, в плеер.
Задача 1 (самостоятельно)
• Создать аудиоплеер с описанными в предыдущей задаче
возможностями.
• Стилизовать аудиоплеер.
Режим редактора
• Режим редактора – особое состояние DOM-элемента, которое
позволяет пользователю напрямую взаимодействовать с
содержимым элемента, изменяя его как форматированный текст.
• Для включения режима редактора используется атрибут или
свойство contenteditable:
или
<div contenteditable="true"></div>
const div = document.getElementById('editor');
div.contenteditable = true;
Команды режима редактора
• Для выполнения действий режима редактора программно при помощи
скрипта используюся команды редактора.
• Команды редактора запускаются следующим образом:
• Первый аргумент – название команды. Второй аргумент следует
устанавливать в false. Третий аргумент – данные для запуска команды (или
null для команд, которые не требуют данных)
• Команда выполняется в документе в том месте, где установлен курсор
пользователя. Если курсор не установлен нигде или выделен текст за
пределами элемента в режиме редактора, запуск команды не возымеет
эффекта.
document.execCommand('command', false, data);
Список команд
Команда Данные Описание
bold - Жирное выделение в месте выделения или курсора
italic - Курсивное выделение
underline - Подчеркнутое выделение
fontName Строка с названием шрифта Изменение шрифта для выделенного текста или места курсора
fontSize Число от 1 до 7 Изменение размера шрифта (от x-small до xx-large)
foreColor Строка с цветом (CSS) Изменение цвета выделенного текста
backColor Строка с цветом (CSS) Изменение цвета фонового текста
heading Название тега h1..h6 Установка в место курсора или выделения заголовка. Уровень
передается в данные
increaseFontSize - Увеличение размера шрифта
decreaseFontSize - Уменьшение размера шрифта
formatBlock Название тега Обертка выделенного текста или курсора тегом, название
которого передается в данные.
Список команд
Команда Данные Описание
createLink Строка с адресом Создает из выделенного текста ссылку с адресом, переданным в данные
unlink - Удаляет ссылку с выделенного текста или места курсора
justifyCenter - Выравнивает текст в месте положения курсора по центру
justifyLeft - Выравнивание по левому краю
justifyRight - Выравнивание по правому краю
justifyFull - Выравнивание по ширине
indent - Добавляет один отступ красной строки
outdent - Удаляет один отступ красной строки
insertText Строка Вставляет или заменяет выделенный текст на текст, переданный в команду
insertOrderedList - Вставляет или превращает выделенный текст в нумерованный список
insertUnorderedList - Вставляет/оборачивает выделение в маркированный список
Список команд
Команда Данные Описание
insertParagraph - Вставляет/оборачивает выделение в тег <p>
insertImage Адрес изображения Вставляет изображение. Адрес изображения передается в команду.
insertHTML Строка с HTML Вставляет в место положения курсора HTML-содержимое
copy - Копирует выделенный текст в буфер обмена
cut - Вырезает выделенный текст в буфер обмена
paste - Вставляет текст из буфера обмена в место положения курсора
undo - Отменяет предыдущую операцию (аналог Ctrl + Z)
redo - Возвращает отмену предыдущей операции (аналог Ctrl + Y)
removeFormat - Очищает форматирование с выделенного участка текста.
И другие команды (см. дополнительные материалы)
Состояние команды в текущей
позиции
• Для построения отзывчивого интерфейса визуального редактора полезно иметь
возможность определить, применена ли данная команда в текущей позиции
курсора, и каким образом. Для этого существуют следующие возможности:
Вернет true, если в данный момент команду можно применить.
Вернет true, если в текущей позиции курсора применена данная команда и false в
противном случае.
Вернет значение, с которым была запущена переданная команда в позиции курсора.
document.queryCommandEnabled('bold')
document.queryCommandState('italic')
document.queryCommandValue('insertlink')
Задача 2
• Построить редактор форматированного текста с возможностями:
• Изменять начертание текста: жирное, курсивное, подчеркнутое.
• Изменять параметры шрифта: размер, гарнитура, цвет.
• Вставлять и удалять ссылку
• Редактор должен подсвечивать кнопки и другие элементы в
соответствии с тем, в каком состоянии и доступна ли операция в
данный момент в данном положении курсора.
Задача 2 (самостоятельно)
• Дополнить редактор следующими возможностями:
• Выравнивание текста
• Очистка форматирования
• Добавление картинки
• Операции копирования, вырезания, вставки
• Отмена и возврат действия
Drag & Drop API
• Drag&Drop – общее названия для перечня событий и
дополнительных возможностей в DOM, позволяющих реализовать
перетаскивание на странице.
• Перетаскивание бывает двух видов: когда перетаскивается сам
элемент в другое место и когда на элемент перетаскивается какое-
то другое содержимое.
Перетаскивание элементов
• Для того, чтобы элемент можно было перетаскивать, для него
необходимо задать свойство draggable в значение true.
• Тогда элемент будет инициировать события:
• dragstart – возникает, когда элемент начинают перетаскивать
• drag – возникает каждый раз, когда элемент перемещается при
перетаскивании
• dragend – возникает, когда перетаскивание элемента завершается
Перетаскивание на элемент
• Перетаскивать на элемент можно: другие элементы, текст или файл.
Для работы с этим функционалом не требуется никаких
дополнительных действий. При перетаскивании на элемент он
инициирует события:
• dragenter – возникает, когда на элемент ввели курсор с перетаскиваемым
содержимым
• dragover – возникает каждый раз, когда над элементом перемещается курсор
с перетаскиваемым содержимым
• dragleave – возникает, когда курсор с перетаскиваемым содержимым
покидает границы элемента
• drop – возникает, когда над элементом отпускают перетаскивание. В этом
событии можно обратиться к содержимому, которое перетаскивалось.
Задача 3.
• Создать список элементов на странице. Реализовать
перетаскивание элементов в этом списке.
Дополнительные API
• DOM Selection API – позволяет работать с выделениями на странице
(выделение текста).
• CSS Object Model – позволяет работать с CSS-документами при
помощи Javascript на уровне структурных единиц языка CSS
• DOM Parser – API для превращения XML-документов в DOM-
документ для последующего извлечения данных.
Дополнительные материалы
События аудио и видео
https://developer.mozilla.org/ru/docs/Web/Guide/Events/Medi
a_events
Свойства тегов аудио и видео
https://developer.mozilla.org/en-
US/docs/Web/API/HTMLMediaElement
execCommand и список команд режима редактора
https://developer.mozilla.org/ru/docs/Web/API/Document/exe
cCommand
Drag and drop на MDN
https://developer.mozilla.org/ru/docs/Web/Guide/HTML/Drag
_and_drop
Введение в работу с выделением текста
https://learn.javascript.ru/range-textrange-selection
CSS Object Model - перечень возможностей
https://developer.mozilla.org/ru/docs/Web/API/CSS_Object_M
odel
DOMParser
https://developer.mozilla.org/ru/docs/Web/API/DOMParser

More Related Content

What's hot

C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
Igor Shkulipa
 
Selenium RC + python: история одного проекта
Selenium RC + python: история одного проектаSelenium RC + python: история одного проекта
Selenium RC + python: история одного проекта
Konstantin Prishchenko
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
Fedor Malyshkin
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
Илья Кожухов
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
Igor Shkulipa
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...sqadays8
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
Igor Shkulipa
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
 
Сидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDСидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDD
Stanislav Sidristy
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
Igor Shkulipa
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
Igor Shkulipa
 
Emmet - инструмент для веб-разработчика
Emmet - инструмент для веб-разработчикаEmmet - инструмент для веб-разработчика
Emmet - инструмент для веб-разработчика
FDConf
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
bearoff
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
Igor Shkulipa
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
Roman Dvornov
 

What's hot (20)

C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
Selenium RC + python: история одного проекта
Selenium RC + python: история одного проектаSelenium RC + python: история одного проекта
Selenium RC + python: история одного проекта
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Сидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDСидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDD
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
Emmet - инструмент для веб-разработчика
Emmet - инструмент для веб-разработчикаEmmet - инструмент для веб-разработчика
Emmet - инструмент для веб-разработчика
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Selenium vs AJAX
Selenium vs AJAXSelenium vs AJAX
Selenium vs AJAX
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 

Similar to Дополнительные приёмы работы в DOM

Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"MobiDev
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
Georgy Turevich
 
Верстка_Лекция_3
Верстка_Лекция_3Верстка_Лекция_3
Верстка_Лекция_3itc73
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.
Eugene Fidelin
 
Основные операции с текстом
Основные операции с текстомОсновные операции с текстом
Основные операции с текстом
Ed Solovey
 
объекты Word
объекты Wordобъекты Word
объекты Word
LidiKashka
 
Visual studio toolbox
Visual studio toolboxVisual studio toolbox
Visual studio toolbox
Sergey Teplyakov
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&cssitc73
 
Владимир Мельник Практические примеры используя модуль feeds
Владимир Мельник Практические примеры используя модуль feedsВладимир Мельник Практические примеры используя модуль feeds
Владимир Мельник Практические примеры используя модуль feedsAlbina Tiupa
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
Sergey Schetinin
 
пр 14.docx
пр 14.docxпр 14.docx
пр 14.docx
ssuser6d63bc1
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Вадим Воробьев
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
В. Мельник Практические примеры использования модуль feeds
В. Мельник Практические примеры использования модуль feedsВ. Мельник Практические примеры использования модуль feeds
В. Мельник Практические примеры использования модуль feedsAlbina Tiupa
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 

Similar to Дополнительные приёмы работы в DOM (20)

Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"
 
Обзор возможностей HTML5
Обзор возможностей HTML5Обзор возможностей HTML5
Обзор возможностей HTML5
 
Обзор возможностей HTML5
Обзор возможностей HTML5Обзор возможностей HTML5
Обзор возможностей HTML5
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
 
лек13 3
лек13 3лек13 3
лек13 3
 
Верстка_Лекция_3
Верстка_Лекция_3Верстка_Лекция_3
Верстка_Лекция_3
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.
 
Основные операции с текстом
Основные операции с текстомОсновные операции с текстом
Основные операции с текстом
 
объекты Word
объекты Wordобъекты Word
объекты Word
 
Visual studio toolbox
Visual studio toolboxVisual studio toolbox
Visual studio toolbox
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&css
 
Владимир Мельник Практические примеры используя модуль feeds
Владимир Мельник Практические примеры используя модуль feedsВладимир Мельник Практические примеры используя модуль feeds
Владимир Мельник Практические примеры используя модуль feeds
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
пр 14.docx
пр 14.docxпр 14.docx
пр 14.docx
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительность
 
лек11 5
лек11 5лек11 5
лек11 5
 
лек11 5
лек11 5лек11 5
лек11 5
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
В. Мельник Практические примеры использования модуль feeds
В. Мельник Практические примеры использования модуль feedsВ. Мельник Практические примеры использования модуль feeds
В. Мельник Практические примеры использования модуль feeds
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 

More from Denis Latushkin

Дополнительные возможности Javascript
Дополнительные возможности JavascriptДополнительные возможности Javascript
Дополнительные возможности Javascript
Denis Latushkin
 
Нестатичное позиционирование и верстка форм
Нестатичное позиционирование и верстка формНестатичное позиционирование и верстка форм
Нестатичное позиционирование и верстка форм
Denis Latushkin
 
Приёмы верстки страниц с использованием HTML + CSS
Приёмы верстки страниц с использованием HTML + CSSПриёмы верстки страниц с использованием HTML + CSS
Приёмы верстки страниц с использованием HTML + CSS
Denis Latushkin
 
Габаритные свойства, блочная модель и псевдоэлементы CSS
Габаритные свойства, блочная модель и псевдоэлементы CSSГабаритные свойства, блочная модель и псевдоэлементы CSS
Габаритные свойства, блочная модель и псевдоэлементы CSS
Denis Latushkin
 
Основы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSSОсновы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSS
Denis Latushkin
 
Продвинутый HTML
Продвинутый HTMLПродвинутый HTML
Продвинутый HTML
Denis Latushkin
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
Denis Latushkin
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 
Основы языка HTML
Основы языка HTMLОсновы языка HTML
Основы языка HTML
Denis Latushkin
 
Введение во фронтенд-разработку
Введение во фронтенд-разработкуВведение во фронтенд-разработку
Введение во фронтенд-разработку
Denis Latushkin
 
Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложении
Denis Latushkin
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
Denis Latushkin
 
Приемы верстки страниц
Приемы верстки страницПриемы верстки страниц
Приемы верстки страниц
Denis Latushkin
 

More from Denis Latushkin (13)

Дополнительные возможности Javascript
Дополнительные возможности JavascriptДополнительные возможности Javascript
Дополнительные возможности Javascript
 
Нестатичное позиционирование и верстка форм
Нестатичное позиционирование и верстка формНестатичное позиционирование и верстка форм
Нестатичное позиционирование и верстка форм
 
Приёмы верстки страниц с использованием HTML + CSS
Приёмы верстки страниц с использованием HTML + CSSПриёмы верстки страниц с использованием HTML + CSS
Приёмы верстки страниц с использованием HTML + CSS
 
Габаритные свойства, блочная модель и псевдоэлементы CSS
Габаритные свойства, блочная модель и псевдоэлементы CSSГабаритные свойства, блочная модель и псевдоэлементы CSS
Габаритные свойства, блочная модель и псевдоэлементы CSS
 
Основы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSSОсновы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSS
 
Продвинутый HTML
Продвинутый HTMLПродвинутый HTML
Продвинутый HTML
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Основы языка HTML
Основы языка HTMLОсновы языка HTML
Основы языка HTML
 
Введение во фронтенд-разработку
Введение во фронтенд-разработкуВведение во фронтенд-разработку
Введение во фронтенд-разработку
 
Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложении
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
 
Приемы верстки страниц
Приемы верстки страницПриемы верстки страниц
Приемы верстки страниц
 

Дополнительные приёмы работы в DOM

  • 1. Дополнительные возможности в DOM Курс Frontend-разработки на Javascript + Vue/React
  • 2. Работа с аудио/видео • Работа с аудио или видео, встроенными по стандарту HTML5, сводится к работе с DOM-элементами соответствующего тега <audio> или <video>. • На базе DOM-элемента аудио или видео разработчики строят собственные стилизованные плееры. Стилизовать базовый браузерный плеер при помощи CSS не представляется возможным.
  • 3. События медийных тегов Событие Описание canplay Возникает, когда медиа готово к воспроизведению. play Возникает, когда медиа начинает воспроизводиться. pause Возникает, когда медиа было поставлено на паузу timeupdate Возникает, когда изменилось текущее время медиа ended Возникает, когда воспроизведение медиа дошло до конца error Возникает в случаях, когда при воспроизведении возникла ошибка loadedmetadata Возникает, когда для медиа были загружены метаданные (в частности, длительность)
  • 4. Свойства и методы медийных тегов Свойство/метод Тип значения Описание .currentTime Дробное число Текущее время воспроизведения медиа в секундах. Можно перезаписать. .duration Дробное число Только для чтения. Длительность медиа в секундах. .ended Boolean Только для чтения. Указывает, закончилось ли воспроизведение. .loop Boolean Если задать true, то воспроизведение будет зациклено. .muted Boolean При задании значения true отключает звук в медиа. .paused Boolean Только для чтения. Вернет true если медиа было поставлено на паузу. .playbackRate Дробное число Скорость воспроизведения, по умолчанию = 1. Можно задать другие значения для ускорения/замедления воспроизведения. .src Строка Адрес текущего медиа. Можно перезаписать. .volume Дробное число от 0 до 1 Громкость воспроизведения медиа. .pause() - Запускает приостановление видео на паузу. .play() - Запускает воспроизведение видео (асинхронно).
  • 5. Задача 1. • Создать видеоплеер со следующими возможностями: • Пауза/продолжение и стоп • Перемотка позиции • Изменение громкости воспроизведения • Изменение скорости воспроизведения • Создать видеогалерею из нескольких видео, при клике – отправлять видео, на которое кликнул пользователь, в плеер.
  • 6. Задача 1 (самостоятельно) • Создать аудиоплеер с описанными в предыдущей задаче возможностями. • Стилизовать аудиоплеер.
  • 7. Режим редактора • Режим редактора – особое состояние DOM-элемента, которое позволяет пользователю напрямую взаимодействовать с содержимым элемента, изменяя его как форматированный текст. • Для включения режима редактора используется атрибут или свойство contenteditable: или <div contenteditable="true"></div> const div = document.getElementById('editor'); div.contenteditable = true;
  • 8. Команды режима редактора • Для выполнения действий режима редактора программно при помощи скрипта используюся команды редактора. • Команды редактора запускаются следующим образом: • Первый аргумент – название команды. Второй аргумент следует устанавливать в false. Третий аргумент – данные для запуска команды (или null для команд, которые не требуют данных) • Команда выполняется в документе в том месте, где установлен курсор пользователя. Если курсор не установлен нигде или выделен текст за пределами элемента в режиме редактора, запуск команды не возымеет эффекта. document.execCommand('command', false, data);
  • 9. Список команд Команда Данные Описание bold - Жирное выделение в месте выделения или курсора italic - Курсивное выделение underline - Подчеркнутое выделение fontName Строка с названием шрифта Изменение шрифта для выделенного текста или места курсора fontSize Число от 1 до 7 Изменение размера шрифта (от x-small до xx-large) foreColor Строка с цветом (CSS) Изменение цвета выделенного текста backColor Строка с цветом (CSS) Изменение цвета фонового текста heading Название тега h1..h6 Установка в место курсора или выделения заголовка. Уровень передается в данные increaseFontSize - Увеличение размера шрифта decreaseFontSize - Уменьшение размера шрифта formatBlock Название тега Обертка выделенного текста или курсора тегом, название которого передается в данные.
  • 10. Список команд Команда Данные Описание createLink Строка с адресом Создает из выделенного текста ссылку с адресом, переданным в данные unlink - Удаляет ссылку с выделенного текста или места курсора justifyCenter - Выравнивает текст в месте положения курсора по центру justifyLeft - Выравнивание по левому краю justifyRight - Выравнивание по правому краю justifyFull - Выравнивание по ширине indent - Добавляет один отступ красной строки outdent - Удаляет один отступ красной строки insertText Строка Вставляет или заменяет выделенный текст на текст, переданный в команду insertOrderedList - Вставляет или превращает выделенный текст в нумерованный список insertUnorderedList - Вставляет/оборачивает выделение в маркированный список
  • 11. Список команд Команда Данные Описание insertParagraph - Вставляет/оборачивает выделение в тег <p> insertImage Адрес изображения Вставляет изображение. Адрес изображения передается в команду. insertHTML Строка с HTML Вставляет в место положения курсора HTML-содержимое copy - Копирует выделенный текст в буфер обмена cut - Вырезает выделенный текст в буфер обмена paste - Вставляет текст из буфера обмена в место положения курсора undo - Отменяет предыдущую операцию (аналог Ctrl + Z) redo - Возвращает отмену предыдущей операции (аналог Ctrl + Y) removeFormat - Очищает форматирование с выделенного участка текста. И другие команды (см. дополнительные материалы)
  • 12. Состояние команды в текущей позиции • Для построения отзывчивого интерфейса визуального редактора полезно иметь возможность определить, применена ли данная команда в текущей позиции курсора, и каким образом. Для этого существуют следующие возможности: Вернет true, если в данный момент команду можно применить. Вернет true, если в текущей позиции курсора применена данная команда и false в противном случае. Вернет значение, с которым была запущена переданная команда в позиции курсора. document.queryCommandEnabled('bold') document.queryCommandState('italic') document.queryCommandValue('insertlink')
  • 13. Задача 2 • Построить редактор форматированного текста с возможностями: • Изменять начертание текста: жирное, курсивное, подчеркнутое. • Изменять параметры шрифта: размер, гарнитура, цвет. • Вставлять и удалять ссылку • Редактор должен подсвечивать кнопки и другие элементы в соответствии с тем, в каком состоянии и доступна ли операция в данный момент в данном положении курсора.
  • 14. Задача 2 (самостоятельно) • Дополнить редактор следующими возможностями: • Выравнивание текста • Очистка форматирования • Добавление картинки • Операции копирования, вырезания, вставки • Отмена и возврат действия
  • 15. Drag & Drop API • Drag&Drop – общее названия для перечня событий и дополнительных возможностей в DOM, позволяющих реализовать перетаскивание на странице. • Перетаскивание бывает двух видов: когда перетаскивается сам элемент в другое место и когда на элемент перетаскивается какое- то другое содержимое.
  • 16. Перетаскивание элементов • Для того, чтобы элемент можно было перетаскивать, для него необходимо задать свойство draggable в значение true. • Тогда элемент будет инициировать события: • dragstart – возникает, когда элемент начинают перетаскивать • drag – возникает каждый раз, когда элемент перемещается при перетаскивании • dragend – возникает, когда перетаскивание элемента завершается
  • 17. Перетаскивание на элемент • Перетаскивать на элемент можно: другие элементы, текст или файл. Для работы с этим функционалом не требуется никаких дополнительных действий. При перетаскивании на элемент он инициирует события: • dragenter – возникает, когда на элемент ввели курсор с перетаскиваемым содержимым • dragover – возникает каждый раз, когда над элементом перемещается курсор с перетаскиваемым содержимым • dragleave – возникает, когда курсор с перетаскиваемым содержимым покидает границы элемента • drop – возникает, когда над элементом отпускают перетаскивание. В этом событии можно обратиться к содержимому, которое перетаскивалось.
  • 18. Задача 3. • Создать список элементов на странице. Реализовать перетаскивание элементов в этом списке.
  • 19. Дополнительные API • DOM Selection API – позволяет работать с выделениями на странице (выделение текста). • CSS Object Model – позволяет работать с CSS-документами при помощи Javascript на уровне структурных единиц языка CSS • DOM Parser – API для превращения XML-документов в DOM- документ для последующего извлечения данных.
  • 20. Дополнительные материалы События аудио и видео https://developer.mozilla.org/ru/docs/Web/Guide/Events/Medi a_events Свойства тегов аудио и видео https://developer.mozilla.org/en- US/docs/Web/API/HTMLMediaElement execCommand и список команд режима редактора https://developer.mozilla.org/ru/docs/Web/API/Document/exe cCommand Drag and drop на MDN https://developer.mozilla.org/ru/docs/Web/Guide/HTML/Drag _and_drop Введение в работу с выделением текста https://learn.javascript.ru/range-textrange-selection CSS Object Model - перечень возможностей https://developer.mozilla.org/ru/docs/Web/API/CSS_Object_M odel DOMParser https://developer.mozilla.org/ru/docs/Web/API/DOMParser