В этой статье я покажу вам, как создать свое первое приложение для обмена валюты.

во-первых, давайте посмотрим на ожидаемый результат:

Предварительные требования: файлы index.html, style.css и script.js и связать их вместе.

Шаг 1. Создайте пользовательский интерфейс.

мы начинаем с добавления элемента h1 для заголовка:

<h1>Currency Exchange</h1>

затем мы добавляем элемент таблицы с четырьмя строками (tr), первая строка содержит три тега заголовка (th), а остальные строки содержат по три ячейки (td) в каждой строке.

<table>
  <tr>
    <th>US Dollar</th>
    <th>1.000</th>
    <th>USD</th>
 
  </tr>
  <tr>
    <td>Euro</td>
    <td id="eur">1.000</td>
 <td>EUR</td>
  </tr>
  <tr>
    <td>Canadian Dollar</td>
    <td id="cad">1.000</td>
   <td>CAD</td>
  </tr>
    <tr>
    <td>Swiss Franc</td>
    <td id="chf">1.000</td>
   <td>CHF</td>
  </tr>
  
</table>

после этого мы добавляем ‹div› с контейнером id, который позже будет содержать диаграмму, и элемент холста, который будет использоваться для рисования диаграммы:

<div  id="container" class="container">
  <canvas id="myChart"></canvas>
</div>

теперь, после того как мы подготовили содержимое HTML, нам нужно добавить некоторые стили на страницу, начиная с элемента h1, мы добавляем следующие правила:

h1{
  text-align:center;
  font-family: Arial, Helvetica, sans-serif;
}

затем мы центрируем таблицу и добавляем к ней границы:

table,  td {
  border:1px solid black;
  margin:auto;
}

наконец, добавьте правила для элемента контейнера:

.container{
  width:500px;
  height:500px;
  margin:auto;
  margin-top:30px;
}

после того, как мы закончили с пользовательским интерфейсом, мы можем безопасно перейти к шагу 2.

Шаг 2. Получите данные о валюте из API обмена валюты:

Есть несколько доступных вариантов currency API, я нашел Frankfurter

хороший и простой вариант с большим разнообразием поддерживаемой валюты

поэтому начните с открытия script.js и добавьте следующий код для получения данных API

async function fetchData(){

const host = 'api.frankfurter.app';
let resp=await fetch(`https://${host}/latest?amount=1&from=EUR&to=USD`)
const data=await resp.json()
console.log(data.rates.USD)

} 
fetchData()

В этом коде мы использовали асинхронную функцию, поскольку выборка API является асинхронным процессом, мы использовали встроенный метод выборки для получения URI API и использовали ключевое слово await для ожидания ответа API
после того, как получили нужный нам запрос. чтобы преобразовать его из формата json в объект javascript, используя метод .json()
наконец, мы выводим на консоль соотношение между валютой и долларом США
что-то важное для обратите внимание, что мы отправили денежную сумму и валюту «от» и «до» в URL-запросах API:

последняя?amount=1&from=EUR&to=USD

теперь ожидаемый результат будет около: 1.09

после того, как мы закончили этот процесс, мы можем сделать то же самое и с несколькими валютами, но на этот раз сохранить вывод в массиве данных

async function fetchData(){
let data=[1]
const host = 'api.frankfurter.app';
let resp=await fetch(`https://${host}/latest?amount=1&from=EUR&to=USD`)
const data1=await resp.json()
data.push(data1.rates.USD)
 resp=await fetch(`https://${host}/latest?amount=1&from=CAD&to=USD`)
const data2=await resp.json()
data.push(data2.rates.USD)
 resp=await fetch(`https://${host}/latest?amount=1&from=CHF&to=USD`)
const data3=await resp.json()
data.push(data3.rates.USD)
}
fetchData()

обратите внимание, что первым элементом является data=[1], так как доллар США всегда равен 1 доллару США

теперь мы готовы привязать значения данных к элементам таблицы

  document.getElementById("eur").innerHTML=data[1]
  document.getElementById("cad").innerHTML=data[2]
  document.getElementById("chf").innerHTML=data[3]

какой вывод:

наконец, мы готовы перейти к третьему шагу, визуализировать результат

Шаг 3. Рисование гистограммы с помощью chartjs:

есть несколько вариантов рисования диаграмм в javascript, один из моих любимых — Chartjs
первым шагом нам нужно будет добавить cdn библиотеки в код HTMLвыше тег скрипта

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
  
  <script src="script.js"></script>

то мы можем просто добавить в библиотеку запущенный код и конечно же изменить метки и передать массив данных в свойство data

const ctx = document.getElementById('myChart');

  new Chart(ctx, {
    type: 'bar',
    data: {
      labels: ['USD', 'EUR', 'CAD', 'CHF'],
      datasets: [{
        label: 'Exchange ratio',
        data: data,
        borderWidth: 1
      }]
    },
    options: {
      scales: {
        y: {
          beginAtZero: true
        }
      }
    }
  });

поэтому полный script.js выглядит так

async function fetchData(){
let data=[1]
const host = 'api.frankfurter.app';
let resp=await fetch(`https://${host}/latest?amount=1&from=EUR&to=USD`)
const data1=await resp.json()
data.push(data1.rates.USD)
 resp=await fetch(`https://${host}/latest?amount=1&from=CAD&to=USD`)
const data2=await resp.json()
data.push(data2.rates.USD)
 resp=await fetch(`https://${host}/latest?amount=1&from=CHF&to=USD`)
const data3=await resp.json()
data.push(data3.rates.USD)
document.getElementById("eur").innerHTML=data[1]
document.getElementById("cad").innerHTML=data[2]
document.getElementById("chf").innerHTML=data[3] 
const ctx = document.getElementById('myChart');

  new Chart(ctx, {
    type: 'bar',
    data: {
      labels: ['USD', 'EUR', 'CAD', 'CHF'],
      datasets: [{
        label: 'Exchange ratio',
        data: data,
        borderWidth: 1
      }]
    },
    options: {
      scales: {
        y: {
          beginAtZero: true
        }
      }
    }
  });
}

fetchData();

и окончательный результат будет выглядеть так:

Надеюсь, вам понравилась статья, вам также может понравиться: Распространенные ошибки JavaScript