script.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. function multiplicationTable() {
  2. let table = document.createElement('table');
  3. table.style.fontFamily = 'sans-serif';
  4. let arrNum = [];
  5. for (let i = 1; i <= 10; i++) {
  6. arrNum[i] = [];
  7. for (let j = 1; j <= 10; j++) {
  8. arrNum[i][j-1] = i * j;
  9. }
  10. }
  11. for (let row = 1; row <= arrNum.length-1; row++) {
  12. let tr = document.createElement('tr');
  13. for (let col = 0; col < arrNum.length-1; col++) {
  14. let td = document.createElement('td');
  15. td.innerText = arrNum[row][col];
  16. td.onmouseout = function(event){
  17. this.style.backgroundColor = '';
  18. Array.from(this.parentElement.children).forEach(item => item.style.backgroundColor = '');
  19. colTable(this.cellIndex, '');
  20. }
  21. td.onmouseover = function(event){
  22. Array.from(this.parentElement.children).forEach(item => item.style.backgroundColor = '#aaa');
  23. colTable(this.cellIndex, '#aaa');
  24. this.style.backgroundColor = '#6d75cb';
  25. }
  26. tr.append(td);
  27. }
  28. for (let cell of tr.cells) {
  29. cell.style.border = '2px solid #000';
  30. cell.style.padding = '10px';
  31. cell.style.textAlign = 'center';
  32. cell.classList.add('td');
  33. }
  34. table.append(tr);
  35. }
  36. document.body.append(table);
  37. function colTable(index, str){
  38. for (let row of document.querySelector('table').rows) {
  39. row.cells[index].style.backgroundColor = str;
  40. }
  41. }
  42. } // Таблица умножения
  43. multiplicationTable();
  44. function calculator() {
  45. const urlDefault = 'https://open.er-api.com/v6/latest/USD';
  46. // создание HTML елементов
  47. const currencyMain = document.createElement('select');
  48. currencyMain.id = 'currencyMain';
  49. currencyMain.style.cssText = 'width: 100%;padding: 10px 20px;font-size: 16px;text-align: center;';
  50. const currencySecond = document.createElement('select');
  51. currencySecond.id = 'currencySecond';
  52. currencySecond.style.cssText = 'width: 100%;padding: 10px 20px;font-size: 16px;text-align: center;';
  53. const countMain = document.createElement('input');
  54. countMain.id = 'countMain';
  55. countMain.type = 'number';
  56. countMain.value = '100';
  57. countMain.style.cssText = 'width: 100%;padding: 10px 20px;font-size: 16px;text-align: center;';
  58. const countSecond = document.createElement('input');
  59. countSecond.id = 'countSecond';
  60. countSecond.type = 'text';
  61. countSecond.style.cssText = 'width: 100%;padding: 10px 20px;font-size: 16px;text-align: center;';
  62. const form = document.createElement('form');
  63. form.action = '#';
  64. form.style.cssText = 'margin: 0 auto;display: flex;max-width: 800px;justify-content: center;flex-direction: column;';
  65. const formRow1 = document.createElement('div');
  66. formRow1.className = 'form__row';
  67. formRow1.style.cssText = 'display: flex;flex-direction: row;align-items: center;justify-content: space-between;';
  68. const formRow2 = document.createElement('div');
  69. formRow2.className = 'form__row';
  70. formRow2.style.cssText = 'display: flex;flex-direction: row;align-items: center;justify-content: space-between;';
  71. formRow1.append(countMain);
  72. formRow1.append(currencyMain);
  73. formRow2.append(countSecond);
  74. formRow2.append(currencySecond);
  75. form.append(formRow1);
  76. form.append(formRow2);
  77. document.body.append(form);
  78. // наполнение значениями
  79. let arrMain = new Map();
  80. function requestOption (url, currencyMain, currencySecond){
  81. fetch(url)
  82. .then(response => response.json())
  83. .then(data => {
  84. for (const prod in data.rates) {
  85. let listOption = document.createElement('option');
  86. listOption.textContent = prod;
  87. currencyMain.appendChild(listOption);
  88. currencySecond.appendChild(listOption.cloneNode(true));
  89. }
  90. currencySecond.options[Math.round(Math.random()* currencySecond.options.length)].selected = true;
  91. })
  92. .catch(er => console.error(er))
  93. } //отрисовка всех доступных option
  94. function requestValues (url, arr){
  95. fetch(url)
  96. .then(response => response.json())
  97. .then(data => {
  98. for (const prod in data.rates) {
  99. arr.set(prod, data.rates[prod]);
  100. }
  101. })
  102. .catch(er => console.error(er))
  103. } // получение актуально курса по определённой валюте
  104. function calculate (countMain, countSecond, currencyMain, currencySecond, arrMain){
  105. if (currencyMain === currencySecond){
  106. countSecond.value = 'Выберите разные валюты';
  107. }
  108. else if(countMain <= 0){
  109. countSecond.value = 'Введите число больше 0';
  110. }
  111. else {
  112. countSecond.value = +arrMain.get(currencySecond) * +countMain;
  113. }
  114. } // конвертация валют
  115. function eventListener(arrMain){
  116. arrMain.clear();
  117. requestValues(`https://open.er-api.com/v6/latest/${currencyMain.value}`, arrMain);
  118. setTimeout(() => {
  119. calculate(countMain.value, countSecond, currencyMain.value, currencySecond.value, arrMain);
  120. },1000);
  121. } // функция вызова по событию
  122. requestOption(urlDefault, currencyMain, currencySecond);
  123. currencyMain.addEventListener('change', () => eventListener(arrMain));
  124. currencySecond.addEventListener('change', () => eventListener(arrMain));
  125. countMain.addEventListener('change', () => eventListener(arrMain));
  126. } // Калькулятор
  127. calculator();
  128. // Для коректной работы калькулятора нужно выполнить:
  129. // Изменить значение в поле ввода + нажать enter
  130. // Выбрать разные валюты (USA => UAH)
  131. // Ввести количество валюты больше 0