script-for-index.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // switch: if
  2. // Перепишите пример ниже, используя if.
  3. switch_if: {
  4. let color = prompt('Введите цвет', '').toLowerCase();
  5. if (color == 'red' || color == 'black') {
  6. document.write("<div style='background-color: black; color: white;'>черный</div>");
  7. if (color == 'red') {
  8. document.write("<div style='background-color: red;'>красный</div>");
  9. }
  10. } else if (color == 'blue' || color == 'green') {
  11. document.write("<div style='background-color: green;'>зеленый</div>");
  12. if (color == 'blue') {
  13. document.write("<div style='background-color: blue;'>синий</div>");
  14. }
  15. } else {
  16. document.write("<div style='background-color: gray;'>Я не понял</div>");
  17. }
  18. }
  19. // closure calc
  20. // Напишите внутри анонимной функции, переданной в then (data =>):
  21. // цикл, который перебирает курсы;
  22. // на каждой итерации создается кнопка (document.createElement)
  23. // текст кнопки - название валюты (innerHTML или innerText)
  24. // Назначьте обработчик события на этой кнопке (onclick = () => {.....}). Функция-обработчик должна быть
  25. // написана прямо в теле цикла. Обработчик должен спрашивать сумму используя prompt и переводить эту суммы
  26. // из валюты, написанной на кнопке в USD
  27. // Найдите замыкания. Для доступа к валютам из data.rates используйте [], . тут не поможет. Кнопки добавляйте в
  28. // специальный контейнер (div например), созданный в HTML, или, на худой конец, в body
  29. closure_calc: {
  30. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  31. .then(data => {
  32. for (let rate in data.rates) {
  33. let div = document.createElement('div');
  34. let button = document.createElement('button');
  35. button.innerHTML = rate;
  36. div.append(button);
  37. document.body.append(div);
  38. button.onclick = () => {
  39. let sum = prompt('How much do you want to exchange?');
  40. let result = sum / data.rates[rate];
  41. alert(result);
  42. }
  43. }
  44. //эта функция запускается когда данные скачиваются.
  45. //остальной код работает РАНЬШЕ.
  46. //только ТУТ есть переменная data со скачанными данными
  47. console.log(data) //изучите структуру, получаемую с сервера в консоли
  48. })
  49. }
  50. // closure calc 2
  51. // Создайте HTML файл с :
  52. // <select id='from'> - исходная валюта
  53. // <select id='to'> - валюта в которую происходит обмен
  54. // <div id='rate'> - кросскурс между валютами
  55. // <input type='number' id='amount' /> - сумма в исходной валюте
  56. // <div id='result'> - сумма в валюте, в которую хотим поменять
  57. // Используя заготовку из предыдущего задания, наполните select-ы тэгами option с названиями валют, используя цикл
  58. // document.createElement
  59. // innerText для option
  60. // from.append или to.append
  61. // За пределами цикла назначьте обработчики onchange для элементов select и oninput для элемента input,
  62. // используя их id. По этим событиям обновляйте текст в div#rate и div#result
  63. // Для чтения текущего значения select используйте свойство value: from.value или to.value
  64. closure_calc_2: {
  65. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  66. .then(data => {
  67. let selectFrom = document.createElement('select');
  68. selectFrom.id = 'from';
  69. document.body.append(selectFrom);
  70. let selectTo = document.createElement('select');
  71. selectTo.id = 'to';
  72. document.body.append(selectTo);
  73. let divRate = document.createElement('div');
  74. divRate.id = 'rate';
  75. document.body.append(divRate);
  76. let inputAmount = document.createElement('input');
  77. inputAmount.id = 'amount';
  78. inputAmount.type = 'number';
  79. document.body.append(inputAmount);
  80. let divResult = document.createElement('div');
  81. divResult.id = 'result';
  82. document.body.append(divResult);
  83. for (let rate in data.rates) {
  84. let optionFrom = document.createElement('option');
  85. optionFrom.innerText = rate;
  86. selectFrom.append(optionFrom);
  87. let optionTo = document.createElement('option');
  88. optionTo.innerText = rate;
  89. selectTo.append(optionTo);
  90. }
  91. selectFrom.onchange = selectTo.onchange = () => {
  92. divRate.innerText = data.rates[document.getElementById('from').value] /
  93. data.rates[document.getElementById('to').value];
  94. }
  95. inputAmount.oninput = () => {
  96. divResult.innerText = (data.rates[document.getElementById('from').value] /
  97. data.rates[document.getElementById('to').value]) * document.getElementById('amount').value;
  98. }
  99. })
  100. }
  101. // countries and cities
  102. // По аналогии с предыдущем заданием, реализуйте интерфейс выбора страны и города:
  103. // по закрузке данных наполняйте select#countries элементами option с названиями стран;
  104. // так же назначьте обработчик события onchange в select#countries, который:
  105. // удаляет старый контент select#cities (достаточно занести в innerHTML или innerText пустую строку)
  106. // добавляет в select#cities элементы option с городами из выбранной только что страны.
  107. // Таким образом, при изменении страны будет меняться список городов в select#cities
  108. countries_and_cities: {
  109. fetch('https://raw.githubusercontent.com/russ666/all-countries-and-cities-json/master/countries.min.json').then(res => res.json())
  110. .then(data => {
  111. let countriesSelect = document.createElement('select');
  112. countriesSelect.id = 'countries';
  113. document.body.append(countriesSelect);
  114. let citiesSelect = document.createElement('select');
  115. citiesSelect.id = 'cities';
  116. document.body.append(citiesSelect);
  117. function setOptions(options, selectEl) {
  118. for (let option of options) {
  119. let optionEl = document.createElement('option');
  120. optionEl.innerText = option;
  121. selectEl.append(optionEl);
  122. }
  123. }
  124. setOptions(Object.keys(data), countriesSelect);
  125. const firstCountry = Object.keys(data)[0];
  126. setOptions(data[firstCountry], citiesSelect);
  127. countriesSelect.onchange = () => {
  128. citiesSelect.innerText = '';
  129. setOptions(data[countriesSelect.value], citiesSelect);
  130. }
  131. })
  132. }