WEB 2 Ибрагимова Шакиров
.docxУФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ФАКУЛЬТЕТ ИНФОРМАТИКИ И РОБОТОТЕХНИКИ
КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ
|
|
|
||
|
УТВЕРЖДАЮ Проректор университета по научной работе ФИО |
|||
|
|
|
||
|
"___" ______________ _______г. |
|||
|
|
|
||
Лабораторная работа № 2
«Создание интерактивных элементов пользовательского интерфейса с помощью DOM, JavaScript и jQuery»
|
||||
|
||||
по предмету: Web-технологии |
||||
Преподаватель |
|
Б.С. Юдинцев |
||
|
|
|
||
|
|
|
||
|
|
|
||
Исполнители |
|
К.Б. Ибрагимова А.Р. Шакиров |
||
|
|
|
||
Уфа 2021 |
ЗАДАНИЕ
Реализовать анимацию главного навигационного меню по клику.
Реализовать выделение пункта главного навигационного меню при наведении указателя мыши.
Интерактивная форма: создать форму из нескольких полей и сделать так, чтобы при нажатии на кнопку ввода появлялось модальное окно с подтверждением введенных данных.
Добавить анимацию текстовых блоков.
Добавить анимацию изображений.
Реализовать работу с элементами таблицы.
ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ
DOM (Document Object Model») – это модель, в рамках которой html-тег является объектом и корневым (root) элементом всей страницы, а вложенные теги являются «детьми» (child) данного родительского (parent) элемента. Текст, который находится внутри тега, также является объектом.
Узлы DOM дерева можно редактировать. Для этого существуют следующие методы языка JavaScript:
Поиск узлов в DOM дереве:
Поиск по id – document.getElementById(id).
Поиск по имени класса – getElementsByClassName(className).
Поиск по атрибуту name – document.getElementsByName(name).
Поиск по тегу – getElementsByTagName(tag).
Поиск родительского узла – parentNode.
Поиск дочерних узлов – childNodes.
Поиск первого потомка – firstChild.
Поиск последнего потомка – lastChild.
Поиск, возвращающий первый элемент по данному CSS-селектору –
querySelector(css).
Поиск, возвращающий все элементы, удовлетворяющие данному CSS-селектору – querySelectorAll(css).
Добавление узлов в DOM дерево:
Создать узел – createElement(elementName)
Добавить узел в родительский элемент последним – appendChild().
Добавить узел в родительский элемент перед определенным смежным узлом – insertBefore().
Заменить существующий узел на новый – replaceChild().
Удаление узлов из DOM дерева:
Удалить дочерний узел элемента – removeChild().
Удалить узел – remove().
Методы работы с DOM деревом библиотеки jQuery:
Поиск узлов в DOM дереве – $(".css ")
Добавление узлов в DOM дерево:
Добавить содержимое в конец выбранных элементов – append().
Добавить содержимое в начало выбранных элементов – prepend().
Добавить содержимое после выбранных элементов – after().
Добавить содержимое перед выбранными элементами – before().
Удаление узлов из DOM дерева – .remove().
Обработка DOM-событий
События, которые можно перехватывать с помощью JavaScript для выполнения некоторого кода.
События мыши:
click – происходит, когда кликнули на элемент левой кнопкой мыши (на устройствах с сенсорными экранами оно происходит при касании).
contextmenu – происходит, когда кликнули на элемент правой кнопкой мыши.
mouseover / mouseout – когда мышь наводится на / покидает элемент.
mousedown / mouseup – когда нажали / отжали кнопку мыши на элементе.
mousemove – при движении мыши.
Клавиатурные события:
keydown и keyup – когда пользователь нажимает / отпускает клавишу.
Обработка событий методами библиотеки jQuery
События мыши:
click – происходит, когда кликнули на элемент левой кнопкой мыши (на устройствах с сенсорными экранами оно происходит при касании).
contextmenu – происходит, когда кликнули на элемент правой кнопкой мыши.
.dblclick – происходит, когда кликнули на элемент левой кнопкой мыши дважды
hover – связывает один или два обработчика событий для элемента, которые будут выполнены, когда указатель мыши находится на элементе и при его отведении.
mouseover / mouseout – когда мышь наводится на / покидает элемент.
mousedown / mouseup – когда нажали / отжали кнопку мыши на элементе.
mouseenter / mouseleave – когда указатель мыши заходит на элемент / когда указатель мыши выходит из элемента.
mousemove – при движении мыши.
Клавиатурные события:
keydown и keyup – когда пользователь нажимает / отпускает клавишу.
keypress – когда пользователь нажимает на любую клавишу клавиатуры кроме специальных - Alt, Ctrl, Shift, Esc, PrScr.
Ход работы
Реализуем анимацию главного навигационного меню по клику: сделать выделение пункта главного навигационного меню (nav), при переходе на соответствующую ему страницу (рис.1).
Рисунок 1. Анимация навигационного меню по клику
Реализуем выделение пункта главного навигационного меню (nav) при наведении указателя мыши (рис.2).
Рисунок 2. Анимация навигационного меню
при наведении указателя мыши
Реализация интерактивной формы. Создадим форму из нескольких полей (рис.3).
Рисунок 3. Форма для заполнения
Реализуем показ модального окна с введенными данными по нажатии кнопки ввода (рис.4).
Рисунок 4. Модальное окно с введенными данными
Анимация блоков. При загрузке страницы виден только заголовок «Сообщения» (рис.5).
Рисунок 5. Первичное состоянии страницы «Сообщения»
При клике мышкой на заголовок, появится поле сообщений и цвет заголовка изменится (рис.6). При повторном клике на этот же заголовок поле сообщений скрывается.
Рисунок 6. Состоянии страницы «Сообщения»
после совершения анимации
Анимация изображений. Реализуем изменение стиля изображения при наведении курсора (рис.7).
Рисунок 7. Анимация изображений
Работа с элементами таблицы. Добавим к таблице колонку с номерами (индексами) строк (рис.8).
Рисунок 8. Таблица с колонкой индексов
Реализуем сортировку строк по возрастанию индексов при нажатии на заголовок индексной колонки (тег <th>); при двойном нажатии на заголовок строки сортируются в обратном порядке (рис.9).
Рисунок 9. Отсортированная таблица
по последней цифре года рождения
ВЫВОД
В ходе выполнения лабораторной работы были получены навыки работы c методами языка JavaScript и с методами библиотеки jQuery для управления DOM деревом html страницы. Научились обрабатывать браузерные события и реализовывать анимации с использованием языка JavaScript и библиотеки jQuery.
ЛИСТИНГ
// Обработка события нажатия на кнопку формы
const send = document.querySelector('.form__input.form__send');
send.addEventListener("click", function (event) {
event.preventDefault();
const formNode = document.querySelector(".form");
const form = new FormData(formNode);
const str = `Ваша оценка - ${form.get("ocenka")}, потому что - ${form.get("why") || "Не указано"}`;
alert(str);
});
// Создание анимации скрытия таблицы
let isHidden = false;
const title = document.querySelector(".messages__title");
$(".messages__chat").hide();
title.addEventListener("click", function () {
$(".messages__chat").slideToggle(300, function () {
isHidden = !isHidden;
$(".messages__title").css("color", isHidden ? "red" : "");
});
});
// Обработка сортировки таблицы по нажатию на заголовок столбца
let table = document.querySelector('.table')
table.querySelectorAll('th').forEach((th) => {
const mySort = (isInverse = false) => {
const stolb = th.cellIndex
let sortedRows = Array.from(table.rows) //HTMLCollection => Array
.slice(1) //отсекаем заголовки
.sort((rowA, rowB) => {
let a = isFinite(rowA.cells[stolb].textContent) ? +rowA.cells[stolb].textContent : rowA.cells[stolb].textContent
let b = isFinite(rowB.cells[stolb].textContent) ? +rowB.cells[stolb].textContent : rowB.cells[stolb].textContent
if (!isInverse) {
return a > b ? 1 : -1
} else {
return a > b ? -1 : 1
}
});
table.tBodies[0].append(...sortedRows);
};
th.addEventListener('click', () => {
mySort()
})
th.addEventListener('dblclick', () => {
mySort(true)
})
})