hw.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. 'use strict';
  2. //DOM: ДЗ
  3. //Таблица умножения
  4. //Сделать таблицу умножения, используя DOM createElement и innerText. Создайте таблицу,
  5. //вложенные строки и ячейки в циклах.Должно получится что - то вроде этого:
  6. const table = document.createElement('table');
  7. for (let i = 0; i < 10; i++) {
  8. const tr = document.createElement('tr');
  9. for (let j = 1; j < 11; j++) {
  10. const td = document.createElement('td');
  11. td.id = String(i) + String(j);
  12. td.dataset.col = String(i);
  13. if (j === 10) {
  14. td.textContent = String(i);
  15. tr.prepend(td);
  16. continue;
  17. }
  18. td.textContent = String((i === 0 ? 1 : i) * j);
  19. tr.append(td);
  20. }
  21. table.append(tr);
  22. }
  23. document.body.append(table);
  24. //Подсветить ячейку
  25. //над которой находится курсор мыши. Используйте события mouseover и mouseout,
  26. //и style.backgroundColor для подсветки.
  27. //Читкоды:
  28. //в обработчик события в качестве this передается элемент, на котором событие произошло;
  29. //Внимание: :hover это читерство :-
  30. // let tdId;
  31. // table.onmouseover = function (e): void {
  32. // const {tagName,id} = e.target
  33. // const oldTd = document.getElementById(tdId)
  34. // if (oldTd) oldTd.style.backgroundColor = 'grey'
  35. // if (tagName === "TD") {
  36. // const td = document.getElementById(id)
  37. // td.style.backgroundColor = 'green'
  38. // tdId = id
  39. // } //event - это объект с информацией о событии,
  40. // //передается первым параметром в обработчик события.
  41. // }
  42. // Подсветить строку и столбец,
  43. //в которой находится подсвеченная ячейка. Используйте parentElement
  44. //(родительский элемент элемента DOM), и список его детей: children.
  45. //Читкоды:
  46. //в обработчик события в качестве this передается элемент, на котором событие произошло;
  47. //у td есть свойство cellIndex, в котором лежит номер ячейки;
  48. //у tr, аналогично есть свойство rowIndex - номер строки;
  49. table.onmouseover = function ({
  50. target: {
  51. cellIndex,
  52. tagName,
  53. id,
  54. dataset: { col },
  55. },
  56. }) {
  57. this.childNodes.forEach((element) => {
  58. element.childNodes.forEach((td) => {
  59. if (td.cellIndex === cellIndex) {
  60. td.style.backgroundColor = 'yellow';
  61. } else if (td.dataset.col === col) {
  62. td.style.backgroundColor = 'orange';
  63. } else {
  64. td.style.backgroundColor = 'grey';
  65. }
  66. });
  67. });
  68. if (tagName === 'TD')
  69. document.getElementById(id).style.backgroundColor = 'green';
  70. };
  71. //Calc
  72. //Сделайте ваш калькулятор из первых занятий используя DOM и элементы input
  73. //(в т.ч.type = "number" для чисел) Каждому полю ввода присвойте тот или иной id для обращения в обрабочтике события.
  74. //Для запуска раcчета используйте, например < button id = "calc" > и
  75. //Также можете создать поле ввода для результата и записывать результат в value этого поля.
  76. const btnSubmit = document.getElementById('submitCalc');
  77. const resultP = document.getElementById('result');
  78. btnSubmit.addEventListener('click', updateValue);
  79. function updateValue(e) {
  80. const values = e.target.parentNode.children;
  81. resultP.textContent = String(+values[0].value * +values[1].value);
  82. }
  83. //Calc Live
  84. //Сделайте расчет живым, т. е. обновляющимся по событию oninput каждого поля ввода,
  85. //влияющего на результат.Нет смысла копировать одну и ту же калькуляцию,
  86. //поэтому вначале задекларируйте функцию расчета, а потом присвойте её в
  87. //качестве обработчика события в каждом поле ввода:
  88. const firstInput = document.getElementById('first');
  89. const secondInput = document.getElementById('second');
  90. const hadleInputs = (e, inputValue) => {
  91. resultP.textContent = String(+e.target.value * +inputValue.value);
  92. };
  93. firstInput.addEventListener('change', (e) => hadleInputs(e, secondInput));
  94. secondInput.addEventListener('change', (e) => hadleInputs(e, firstInput));