added animation for description and close button

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2022-12-03 17:13:30 +10:00
parent 7322ba5ead
commit 176dcb8d83

View File

@ -21,14 +21,22 @@ class graph {
element: ['node'], element: ['node'],
onmouseenter: ['onmouseenter'], onmouseenter: ['onmouseenter'],
title: ['title'], title: ['title'],
description: ['description'], cover: ['cover'],
description: {
both: ['description'],
hidden: ['hidden'],
shown: ['shown']
},
close: {
both: ['close'],
hidden: ['hidden'],
shown: ['shown']
},
wrappers: { wrappers: {
both: ['wrapper'], both: ['wrapper'],
left: ['left'], left: ['left'],
right: ['right'] right: ['right']
}, }
cover: ['cover'],
close: ['close']
}, },
connection: { connection: {
shell: ['connections'], shell: ['connections'],
@ -182,7 +190,7 @@ class graph {
// Инициализация описания // Инициализация описания
const description = document.createElement('div'); const description = document.createElement('div');
description.classList.add(..._this.#operator.classes.node.description); description.classList.add(..._this.#operator.classes.node.description.both, ..._this.#operator.classes.node.description.hidden);
if (typeof data.popup === 'string') description.title = data.popup; if (typeof data.popup === 'string') description.title = data.popup;
// Запись анимации "выделение обводкой" (чтобы не проигрывалась при открытии страницы) // Запись анимации "выделение обводкой" (чтобы не проигрывалась при открытии страницы)
@ -381,8 +389,7 @@ class graph {
// Инициализация кнопки закрытия // Инициализация кнопки закрытия
const close = document.createElement('i'); const close = document.createElement('i');
close.classList.add(..._this.#operator.classes.node.close); close.classList.add(..._this.#operator.classes.node.close.both, ..._this.#operator.classes.node.close.hidden);
close.style.display = 'none';
// Запись блокировки закрытия в случае, если был перемещён узел // Запись блокировки закрытия в случае, если был перемещён узел
close.onmousedown = (onmousedown) => { close.onmousedown = (onmousedown) => {
@ -462,15 +469,17 @@ class graph {
// Запись отступа заголовка (чтобы был по центру описания) // Запись отступа заголовка (чтобы был по центру описания)
a.style.left = description.offsetWidth / 2 - a.offsetWidth / 2 + 'px'; a.style.left = description.offsetWidth / 2 - a.offsetWidth / 2 + 'px';
// Сокрытие описания (выполняется после расчёта размера потому, что иначе размер будет недоступен)
description.style.display = 'none';
/** /**
* Показать описание * Показать описание
*/ */
this.show = () => { this.show = fn => {
// Отображение описания и кнопки закрытия описания // Отображение описания
description.style.display = close.style.display = null; description.classList.add(..._this.#operator.classes.node.description.shown);
description.classList.remove(..._this.#operator.classes.node.description.hidden);
// Отображение кнопки закрытия
close.classList.add(..._this.#operator.classes.node.close.shown);
close.classList.remove(..._this.#operator.classes.node.close.hidden);
// Сдвиг кнопки закрытия описания // Сдвиг кнопки закрытия описания
close.style.top = close.style.right = -(((description.offsetWidth - article.offsetWidth) / 4) + description.offsetWidth / 8) + 'px'; close.style.top = close.style.right = -(((description.offsetWidth - article.offsetWidth) / 4) + description.offsetWidth / 8) + 'px';
@ -488,9 +497,14 @@ class graph {
/** /**
* Скрыть описание * Скрыть описание
*/ */
this.hide = () => { this.hide = fn => {
// Скрытие описания и кнопки закрытия описания // Скрытие описания
description.style.display = close.style.display = 'none'; description.classList.add(..._this.#operator.classes.node.description.hidden);
description.classList.remove(..._this.#operator.classes.node.description.shown);
// Скрытие кнопки закрытия
close.classList.add(..._this.#operator.classes.node.close.hidden);
close.classList.remove(..._this.#operator.classes.node.close.shown);
// Удаление всех изменённых аттрибутов // Удаление всех изменённых аттрибутов
close.style.top = close.style.right = article.style.zIndex = close.style.zIndex = close.style.scale = close.style.opacity = null; close.style.top = close.style.right = article.style.zIndex = close.style.zIndex = close.style.scale = close.style.opacity = null;
@ -532,9 +546,7 @@ class graph {
const description = this.element.getElementsByClassName('description')[0]; const description = this.element.getElementsByClassName('description')[0];
// Запись отступа описания (чтобы был по центру узла) // Запись отступа описания (чтобы был по центру узла)
description.style.display = null;
description.style.marginLeft = description.style.marginTop = (this.element.offsetWidth - description.offsetWidth) / 2 + 'px'; description.style.marginLeft = description.style.marginTop = (this.element.offsetWidth - description.offsetWidth) / 2 + 'px';
description.style.display = 'none';
// Инициализация ссылки на ядро // Инициализация ссылки на ядро
const _this = this; const _this = this;