В паре гонок, которые я участвовал в прошлом, я хотел заранее знать, в каком темпе (в мин/км) мне нужно бежать, чтобы достичь своей цели. Таким образом, мне нужно было только проверить свой средний темп во время бега, чтобы убедиться, что я достиг своей цели. Однако большинство калькуляторов темпа, которые вы найдете в Интернете, выглядят примерно так:

Хотя они делают то, что говорят, и в конечном итоге работают нормально, для меня в них есть что-то очень неинтуитивное. Мне это действительно нужно только для одной вещи. Я знаю, что собираюсь пробежать марафон, и я хочу закончить этот марафон менее чем за четыре часа. Какой темп мне тогда нужно поддерживать? Другими словами: введите расстояние и темп, и вы получите темп. Найдя достаточно хороший повод для небольшого проекта, я приступил к созданию калькулятора, который хотел. Шаг номер один, в чем логика расчета? Посмотрим..

Если вы хотите пробежать марафон за 4 часа, это 240 минут. Марафон 42 километра. Это означает, что у вас есть 240/42 = 5,7143 минуты, чтобы закончить каждый километр. Используя эту очень простую формулу, мы можем написать первый бит кода. Нам нужны два поля ввода, которые мы разместим в форме.

Этот фрагмент кода дает нам два поля ввода в форме и кнопку. Чтобы эта кнопка работала, при нажатии на нее должен запускаться скрипт. Этот скрипт содержит функцию, которую вы видите ниже. В нем мы берем значение из обоих полей ввода и присваиваем их переменной. Третья переменная для темпа, которая представляет собой деление расстояния на время. Затем мы хотим иметь возможность печатать этот темп в предложении, поэтому мы добавляем переменную, которая превращает целое число в строку.

Наконец, функция вставляет эту строку в предложение:

На этом технически моя цель достигнута. Мы можем ввести расстояние и время, нажать кнопку и выбрать темп, с которым мы должны бежать. Однако за 5,7143 минуты никто не думает. Вы думаете за 5 минут и x секунд. Следующая задача — отформатировать результат таким образом. Это означает, что переменная темпа должна быть разделена. Сначала мы хотим извлечь 5. Далее мы хотим пересчитать 0,7143 минуты в секунды. Чтобы извлечь 5, мы преобразуем 5,7143 в целое число с помощью функции parseInt(). Вход для этой функции — это строка, которую мы уже вычислили в переменном темпе. Мы назначим это целое число новой переменной с именем минут. Чтобы извлечь все после запятой, мы просто вычитаем целое число из исходного расчета времени/расстояния.

(5,7143–5 ) = 0,7143

Формула пересчета 0,7143 в минуты заключается в простом умножении на 60.

0,7143*60 = 42,858 секунды

Мы помещаем это в новую переменную, называемую секундами. Чтобы сделать все это максимально читабельным, я хотел округлить секунды до одного десятичного знака. Для этого мы используем функцию math.rounded(). Простое помещение переменной секунд в функцию округлило бы ее до целого числа. Чтобы добавить дополнительный десятичный знак, мы умножаем секунды на 10, чтобы добавить дополнительную цифру, и делим на 10, чтобы получить фактический результат с одним десятичным знаком. Все это приводит нас к следующей функции.

Он еще раз выводит переменные результата в предложение

К этому моменту моя первоначальная цель была полностью достигнута. Математика работает, и вы получаете простой вывод темпа из времени и расстояния. Однако вы можете изменить расстояние на имперские единицы и ввести часы вместо минут. Сначала это звучало для меня пугающе (особенно преобразование метрики в империю), но потом я понял, что математика не меняется. Поэтому я решил добавить два дополнительных элемента: раскрывающийся список для километров/миль и один для часов/минут. Мы можем добавить их, добавив выборки с различными параметрами в исходную форму.

Далее идет дополнительная математика, которая нам нужна. Начиная с формата времени, преобразование часов в минуты, конечно, очень простое: если мы хотим разрешить кому-то вводить 4 часа вместо 240 минут, нам нужно умножить результат время/расстояние на 60. Это означает, что мы можем в значительной степени повторно использовать функцию, которую мы использовали для расчета темпа на основе минут. Как видите, если эта функция запущена, она выведет результат в то же предложение, что и функция минут().

Поскольку расчет времени/расстояния не меняется при переключении с километров на мили, единственное, что нужно для размещения селектора километров/миль, — это переменная в конечном выходном предложении. Мы можем сделать это, взяв значение этого селектора и напечатав его в этом предложении. Об этом позаботится следующая функция.

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

Теперь мы почти у цели. Нам нужно добавить еще одну функцию. Эта функция должна выбрать правильную функцию времени (минуты по сравнению с часами) на основе того, что было выбрано пользователем. Если были выбраны часы, запускается функция часы(), а если были выбраны минуты, запускается функция минут().

Самый последний шаг — заставить кнопку «Рассчитать» запускать правильные функции при ее нажатии.

После всего этого пользователь может выбрать часы или минуты, ввести расстояние в километрах или милях и увидеть, что его темп указан в правильном формате. Если вы хотите убедиться, что то, о чем я здесь рассказал, правда и работает ли оно так, как должно, вы можете проверить мой калькулятор здесь. Если это все еще вас не убеждает, не стесняйтесь проверить мой точный код здесь.

Надеюсь, этот пост помог вам создать свой собственный калькулятор или вам просто понравилось видеть логику и функции, которые заставляют работать мой калькулятор темпа. Если вам понравилось, рассмотрите возможность подписки, чтобы время от времени получать подобные сообщения в свой почтовый ящик. Спасибо за чтение!