-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
82 lines (74 loc) · 2.97 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
'use strict';
(function(window) {
let rowIndex, colIndex;//Индексы спрятаных ячеек
const box = document.querySelector('.sTable');
const table = box.querySelector('table');
const addRowButton = box.querySelector('.addRow');
const addColButton = box.querySelector('.addCol');
const delRowButton = box.querySelector('.delRow');
const delColButton = box.querySelector('.delCol');
//просмотр событий
table.addEventListener('mouseenter', pointerMouseEnter);
box.addEventListener('mouseleave', pointerMouseLeave);
table.addEventListener('mousemove', pointerMouseMove);
addRowButton.addEventListener('click', addRow);
addColButton.addEventListener('click', addColumn);
delRowButton.addEventListener('click', deleteRow);
delColButton.addEventListener('click', deleteColumn);
//указатель мыши входит в пределы таблицы
function pointerMouseEnter() {
delRowButton.style.visibility = 'visible';
delColButton.style.visibility = 'visible';
};
//указатель мыши выходит за пределы таблицы
function pointerMouseLeave() {
setTimeout(function() {
if (box.querySelector('table:hover')) return;
if (box.querySelector('.delete-btn:hover')) return;
delRowButton.style.visibility = 'hidden';
delColButton.style.visibility = 'hidden';
}, 200);
};
//указатель мыши двигается в пределах таблицы
function pointerMouseMove(e) {
const {offsetTop, offsetLeft, nodeName, parentElement, cellIndex}= e.target;
if (nodeName === 'TD') {
delRowButton.style.top = offsetTop + 'px';
delColButton.style.left = offsetLeft + 'px';
rowIndex = parentElement.rowIndex;
colIndex = cellIndex;
}
};
//добавление строки
function addRow() {
const newRow = table.querySelector('tr').cloneNode(true);
table.querySelector('tbody').appendChild(newRow);
actionAfter();
};
//добавление столбца
function addColumn() {
table.querySelectorAll('tr').forEach((tr) => {
tr.appendChild(tr.querySelector('td').cloneNode());
});
actionAfter();
};
//удаление строки
function deleteRow() {
table.querySelectorAll('tr')[rowIndex].remove();
actionAfter();
};
//удаление столбца
function deleteColumn() {
table.querySelectorAll('tr').forEach((tr) => {
tr.querySelectorAll('td')[rowIndex].remove();
});
actionAfter();
};
//действия после нажатия кнопки
function actionAfter() {
delRowButton.style.visibility = 'hidden';
delColButton.style.visibility = 'hidden';
delRowButton.style.display = table.querySelectorAll('tr')[1] ? 'block' : 'none';
delColButton.style.display = table.querySelector('tr').children[1] ? 'block' : 'none';
}
}(window));