• Как сделать автоматический конвертер валют определенной суммы по текущему курсу на jquery?

    Сразу говорю, код из старого проекта и не факт, что оптимальный способ сделать конвертацию. А еще использовать JQuery в 2021 не модно.

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

    Получение курса валют:
    $.getJSON('https://www.cbr-xml-daily.ru/daily_json.js', function (data)
        {
            let USDrate = Number(data.Valute.USD.Value);
            let USDNominal = Number(data.Valute.USD.Nominal);
    
            $('input[name="usd-rate"]').val((USDrate / USDNominal).toFixed(2));
        })
        .fail(function (jqXHR, textStatus, errorThrown)
        {
            // Делаю блок выбора валют неактивным, путем добавление CSS класса
            $('.currency-select-container').addClass('disabled');
        });


    Конвертация при клике:
    $(document).on('click', '.currency-select-container .item', function ()
    {
        let convertedTotal = 0;
    
        let actualTotal = $('input[name="actualTotal"]').val();         // Сумма для конвертации
        let initialCurrency = $('input[name="initialCurrency"]').val(); // Изначальная валюта
    
        // Значение выбранной валюты (например из data арибута). Значения USD, EUR и т.д.
        let selectedCurrency = $(this).data('name').toLowerCase();
    
        // Отношение выбранной валюты к рублю
        let currencyRate = $('input[name="' + selectedCurrency + '-rate"]').val();
    
        // Отношение к изначальной валюте. Если конвертация всегда из рублей, то это значение всегда = 1
        let initialRate = $('input[name="' + initialCurrency.toLowerCase() + '-rate"]').val();
    
        if (initialCurrency === "RUB")
        {
            // Если изначальная валюта рубли, то просто конвертируем,
            // используя ранее полученное значение отношения валют
            convertedTotal = actualTotal / currencyRate;
        }
        else
        {
            // Если конвертация не из рублей, то сначала получаю сумму в рублях
            // После чего также обычная конвертация
            let totalInRub = actualTotal * initialRate;
            convertedTotal = totalInRub / currencyRate;
        }
    
        // 1000 в RUB это 13,64 в USD
        console.log(actualTotal + ' в ' + initialCurrency + ' это ' + convertedTotal.toFixed() + ' в ' + selectedCurrency);
    });


    Вот пример того, что хранится в инпутах:
    image.png
    По кнопкам думаю и так понятно из кода выше. Там просто должен быть data-атрибут с наименованием валюты, в которую хотите выполнить конвертацию.

    Еще раз повторюсь, что это лишь моя реализация и она далека от идеала (а может и вообще неправильная).
    Ответ написан
    Комментировать
  • Можно ли обойти CORS политику при отправке запроса на чужой домен?

    @Bob89991
    На домене alisanet.com должны быть прописаны разрешения для кроссдоменных запросов
    Ответ написан
    Комментировать
  • Как делается Preflight запрос?

    REZ1DENT3
    @REZ1DENT3
    web-developer
    Preflight запрос делает браузер автоматически, вам об этом заботиться не нужно.
    https://developer.mozilla.org/en-US/docs/Glossary/...

    A preflight request is automatically issued by a browser and in normal cases, front-end developers don't need to craft such requests themselves. It appears when request is qualified as "to be preflighted" and omitted for simple requests.
    Ответ написан
  • Правильно ли использован requestAnimationFrame?

    AlexandrVV86
    @AlexandrVV86 Автор вопроса
    Хотелось бы подытожить:
    Была проблема с кодом:
    //где-то выше
    el.style.transform = 'translateX(-100%)';
    //где-то ниже
    el.style.transform = '';
    el.style.transition = '10s';
    el.style.transform = 'translateY(100%)';

    Проблема заключалось в том, что transition применялось, еще до (может во время сброса первой трансформации). Поэтому блок двигался не буквой "Г", а по диагонали.

    Евгений скинул видео: Джейк Арчибальд в котором, демонстрируется, решение данной проблемы. Пока я дошел до нужной секунды, читая титры и вникая, я уже сам нашел придумал решение - и оно заработало, но не был уверен в его правильности, так возник этот вопрос. В это время предложил еще варианты решений Сергей Соколов.

    И так публикую 4 решения:
    1, 2 Джейк Арчибальд:
    1. requestAnimationFrame
    requestAnimationFrame(()=>{
    		requestAnimationFrame(()=>{
    			el.style.transition = '10s';
      		el.style.transform = 'translateY(100%)';
      })
    })

    2. Просим браузер посчитать стили для элемента:
    el.style.transform = '';
    getComputedStyle(el).transform;
    el.style.transition = '10s';
    el.style.transform = 'translateY(100%)';


    3, 4 Сергей Соколов
    3. тоже что 2
    el.style.transform = '';
    void el.offsetWidth;
    el.style.transition = '10s';
    el.style.transform = 'translateY(100%)';

    4. Добавление css анимации:
    .animate-go1 {
      animation-duration: 4s;
      animation-name: go1;
    }
    
    @keyframes go1 {
      from {
        transform: translateX(-100%);
      }
    
      0.5% {
        transform: translateX(0%);
      }
    
      to {
        transform: translateY(100%);
      }
    }


    const className = 'animate-go1';
      el.classList.remove(className);
      el.classList.add(className);


    5. Вариант самый короткий, автор Александр:
    el.style.transform = 'translate(-100%, 0)';
    
    c.onclick = function() {
        el.style.transition = '10s';
        el.style.transform = 'translate(0, 100%)';
    }

    Всех благодарю за участие
    Ответ написан
    Комментировать
  • Идея для школьного проекта?

    fomenkogregory
    @fomenkogregory
    Юниор софтварный инженер
    Сайт знакомств со школьницами
    Ответ написан
    1 комментарий
  • Почему не срабатывает clearInterval внутри функции?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Вы при каждом клике создаёте новый интервал, теряя ссылку на старый. На десятый клик вы чистите девятый интервал, первые восемь остаются работать.
    Ответ написан
    Комментировать
  • Почему свойство length начинает считать с единицы, а не с нуля, если в массиве счет начинается с нуля?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Как раз с длиной всё очевидно. length – количество элементов массива:
    []; // сколько элементов? – 0
    ['a']; // сколько элементов: 1
    ['a', 'b', 'c']  // 3

    Индексы начинают с нуля, потому, что индекс – это смещение.
    Исторически, с низкоуровневых языков программирования.
    В памяти под массив выделена некоторая память, начиная с адреса X.
    Последовательно находятся ячейки одинаковой длины. Чтобы найти, где лежит значение i-го элемента, к адресу X прибавляют i * size байт. Самый первый элемент начинается сразу с адреса X. Его индекс 0.

    Так же и со строкой в JavaScript: к буквам можно обращаться по индексу, как к элементам массива.
    "abcd"[1] // "b"
    "abcd"[3] // "d"
    Представьте, что в начале строки стоит курсор. Курсор возвращает букву перед которой стоит. Индекс – на сколько вправо надо этот курсор подвинуть.

    Эта особенность index / length общепринята во многих языках программирования. Так же, как для интервалов часто принято включать начало и исключать конец: [a; b) – например, в методе массива slice(), который вырезает кусок массива, если указать slice(1, 5) — вытащит элементы с индексами 1, 2, 3, 4 – включая 1-й, но не доходя до 5.
    Ответ написан
    Комментировать
  • На каком языке программирования написаны сайты в TOR’e?

    planc
    @planc

    на каком языке программирования пишут сайты в Торе

    на любом

    почему все сайты такие простые!

    нет менеджеров, которые говорят, что нам нужны дельфины рыгающие радугой
    Ответ написан
    3 комментария
  • Как поместить пинг пользователя в embed?

    @Azperin
    Дилетант
    В ембед ник вставляется через ИД <@!${user.id}>, но уведомление не придет, так как они в эмбеде запрещены

    Я с хука так посылал
    Hook.send('<@!477815449195642891>', {
    	embeds: [
    		{ 
    			color: '#fc0303',
    			title: `Some title`,
    			description: `Some description`,
    			url: `http://some.url/`,
    			thumbnail: {
    				url: `http://right-image-preview.com/1.png`,
    			},
    			image: {
    				url: `http://full-image.com/2.png`,
    			},
    			fields: [
    				{
    					name: `Field 1`,
    					value: `Field 1 text`,
    					inline: true,
    				},
    				{
    					name: `Field 2`,
    					value: `Field 2 text`,
    					inline: true,
    				},
    			]
    		},
    	],
    }).then(m => '').catch((e) => '');

    Тоесть он сначала упоминает юзера с ИД 477815449195642891, а ниже эмбед. Не знаю работает ли еще так.
    Ответ написан
    Комментировать
  • Как записать аналог из PHP в JavaScript?

    E1ON
    @E1ON Куратор тега JavaScript
    Programming, Gamedev, VR
    firstArr.map(({ text }) => secondArr.push(text));
    Ответ написан
    3 комментария
  • Почему падает mysqld?

    @Absolute138 Автор вопроса
    Не буду называть хостера...
    Vitaly Karasik оказался прав.
    Далее переписка с саппортом:
    Здравствуйте! В районе 4 утра упал mysqld.
    IP сервера: XXX.XXX.XXX.XXX
    Мой лог mysql по ссылке: http://*.ru/error.log_8.1.gz
    Все рекомендуют проверить работу железа.
    Похожая проблема на форуме MySQL:
    https://forums.mysql.com/read.php?22,620521,620521...
    https://bugs.mysql.com/bug.php?id=74824

    После падения mysql поднялась и сейчас работает без критических ошибок в логах. Уточните, имеются ли на моем сервере проблемы с оборудованием/драйверами? И с чем может быть связано данное падение?

    Ответ хостера:
    Здравствуйте!

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

    И не уведомления, ни черта не было. Такое отношение((
    Ответ написан
    4 комментария
  • Как избавиться от заиканий Астериск?

    @d-stream
    Готовые решения - не подаю, но...
    Собственно достаточно предсказуемая беда с доставкой пакетов через каналы общего пользования с негарантированной доставкой/задержкой.
    Типичная ситуация: толпа народа с web-броузингом, астериски и т.п. Юзер болтает по телефону и открывает страничку с кучей фоток -> броузер в кучу потоков начинает тащить картинки. Канал провайдера - не резиновый и в какой-то момент переполняется - пакеты встают в очередь и ждут... Для подгрузки картинок это максимум чуть притормозит отображение фотки котика, для голоса - произойдет заикание.

    Методы частичного устранения такой проблемы существуют:
    - можно зарезервировать часть полосы под голос
    - можно как минимум в рамках до своего шлюза включительно приоретизировать трафик
    - использовать отдельный канал/шлюз/сеть для телефонии

    Гораздо проблемнее устранять сходные заторы на стороне провайдера. Ну а гарантированные потоки (те же E1) нынче дороги...
    Ответ написан
    7 комментариев
  • Почему проект не работает на Heroku?

    @SaXXuM
    Нужно указать порт сервера через process.env.PORT
    Ответ написан
    Комментировать
  • Как правильнее задавать классы по BEM?

    Realetive
    @Realetive
    MODX Ambassador России, самозванный БЭМ-евангелист
    Оба варианта корректны.
    Ответ написан
    Комментировать
  • Какой node js фреймворк выбрать?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Если прямо модно и мейнстримно, то NestJS, но он сильно завязан на TypeScript (что несомненно плюс) и декораторах (которые нестандартные, а значит, ИМХО, жирнючий минус)
    Помимо вот такого серьезного фреймворка есть микрофреймворки и библиотеки под конкретные задачи:
    Например для создания HTTP серверов есть express, он самый популярный, он под капотом у NestJS, но при не очень грамотном построении приложения легко убить производительность (тут совет использовать его роутер с первых дней)
    В качестве хороших альтернатив есть Koa и Hapi.
    Под websocket обычно все используют socket.io, из плюсов помимо популярности - его протокол реализован на многих языках, как в качестве сервера, так и клиента. В остальном, ИМХО, только минусы.
    В качестве альтернативы есть ws-api, но популярность низкая, typescript версия пока под альфой, и все не доходят руки доделать
    Ответ написан
    Комментировать
  • Конект js и php файла?

    Fragster
    @Fragster
    помогло? отметь решением!
    в пхп прямо в текст сгенеренной страницы вставить тег script с js, который устанавливает глобальную переменную (например window.my_app_page_count), в js скрипте эту переменную использовать по назначению.
    Ответ написан
    Комментировать
  • Как подключить зависимый репозиторий с указанием конкретного коммита в Git?

    gbg
    @gbg
    Любые ответы на любые вопросы
    но ни subtree ни submodules не могут ссылаться на конкретную сборку.

    Вот тут неверное утверждение. Хэш сборки записывается в дерево коммитов родительского репозитария, его можно увидеть
    git submodule status
    Ответ написан
    7 комментариев