added timer for synchronization and intervally node handler

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2022-12-11 18:37:49 +10:00
parent a50a144a8b
commit 7c3a48bbbc

View File

@ -810,29 +810,41 @@ class graph {
get sessions() { return this.#sessions } get sessions() { return this.#sessions }
// Координата X (основной узел) // Координата X (основной узел)
#x1 #x1;
// Прочитать координату X (основной узел) // Прочитать координату X (основной узел)
get x1() { return this.#x1 } get x1() { return this.#x1 }
// Координата Y (основной узел) // Координата Y (основной узел)
#y1 #y1;
// Прочитать координату Y (основной узел) // Прочитать координату Y (основной узел)
get y1() { return this.#y1 } get y1() { return this.#y1 }
// Координата X (связанный узел) // Координата X (связанный узел)
#x2 #x2;
// Прочитать координату X (связанный узел) // Прочитать координату X (связанный узел)
get x2() { return this.#x2 } get x2() { return this.#x2 }
// Координата X (связанный узел) // Координата X (связанный узел)
#y2 #y2;
// Прочитать координату X (связанный узел) // Прочитать координату X (связанный узел)
get y2() { return this.#y2 } get y2() { return this.#y2 }
// Дата окончания синхронизации
#data = Date.now();
// Прочитать дату окончания синхронизации
get data() { return this.#data }
// Таймер синхронизации (в милисекундах)
#timer = 5000;
// Прочитать таймер синхронизации (в милисекундах)
get timer() { return this.#timer }
/** /**
* Конструктор соединения * Конструктор соединения
* *
@ -897,17 +909,17 @@ class graph {
* Синхронизировать c узлом * Синхронизировать c узлом
* *
* @param {node} node Инстанция узла (связанного с соединением) * @param {node} node Инстанция узла (связанного с соединением)
*
* @todo
* 1. Удаление интервала через определённое время
*/ */
synchronize(node) { synchronize(node) {
// Десинхронизация // Десинхронизация
this.desynchronize(node); this.desynchronize(node);
// Инициализация времени работы синхронизации
this.#data = Date.now() + this.#timer;
// Синхронизация // Синхронизация
if (node === this.from) this.#sessions.set(node.element.id, setInterval(fn => this.element.setAttribute('d', `M${this.#x1 = node.element.offsetLeft + node.element.offsetWidth / 2} ${this.#y1 = node.element.offsetTop + node.element.offsetHeight / 2} L${this.#x2} ${this.#y2}`)), 0); if (node === this.from) this.#sessions.set(node.element.id, setInterval(fn => Date.now() < this.#data ? this.element.setAttribute('d', `M${this.#x1 = node.element.offsetLeft + node.element.offsetWidth / 2} ${this.#y1 = node.element.offsetTop + node.element.offsetHeight / 2} L${this.#x2} ${this.#y2}`) : this.desynchronize(node)), 0);
else if (node === this.to) this.#sessions.set(node.element.id, setInterval(fn => this.element.setAttribute('d', `M${this.#x1} ${this.#y1} L${this.#x2 = node.element.offsetLeft + node.element.offsetWidth / 2} ${this.#y2 = node.element.offsetTop + node.element.offsetHeight / 2}`)), 0); else if (node === this.to) this.#sessions.set(node.element.id, setInterval(fn => Date.now() < this.#data ? this.element.setAttribute('d', `M${this.#x1} ${this.#y1} L${this.#x2 = node.element.offsetLeft + node.element.offsetWidth / 2} ${this.#y2 = node.element.offsetTop + node.element.offsetHeight / 2}`) : this.desynchronize(node)), 0);
} }
/** /**
@ -1005,6 +1017,9 @@ class graph {
// Блокировка событий браузера (чтобы не дёргалось) // Блокировка событий браузера (чтобы не дёргалось)
target.ondragstart = null; target.ondragstart = null;
// Каждые 3 секунды обрабатывать взаимодействия между узлами
setInterval(fn => { for (const node of _this.nodes) node.move() }, 3000);
} }
} }
@ -1065,6 +1080,9 @@ class graph {
// Запись статуса о том, что узел в данный момент НЕ перемещается // Запись статуса о том, что узел в данный момент НЕ перемещается
for (const node of _this.nodes) node.actions.move.unlimit = false; for (const node of _this.nodes) node.actions.move.unlimit = false;
// Обработка взаимодействий между всеми узлами
for (const node of _this.nodes) node.move();
// Возвращение позиционирования // Возвращение позиционирования
node.element.style.zIndex = z; node.element.style.zIndex = z;
}; };