added timer for synchronization and intervally node handler
This commit is contained in:
parent
a50a144a8b
commit
7c3a48bbbc
36
graph.js
36
graph.js
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue