Задать вопрос
  • Оцените верстку шаблона?

    FinGanapre
    @FinGanapre
    Шапка на мобилке выглядит сомнительно (Сайт обычно должен хорошо выглядеть на экранах от 320px и выше)
    Телефонный номер должен быть кликабельным для звонка. href="tel:9999999999", почта href="mailto:some@mail.com".
    Иконка поиска в шапке должна быть обёнута в кнопку, если она открывает блок с поиском. Если это ссылка на страницу поиска, то это должна быть ссылка.
    READ MORE в блоке About US cursor: pointer. Картинкам на мобилке не хватает отступа между, но это не точно (не видел макет).
    Discover Our Services: на мобильной версии 3 колонки это много, лучше свернуть в одну.
    What Customers Say?: на мобилке не помещается
    Our Blog & Event: скорее всего, весь блок карточки это сслыка. Т.е. вы просто обёртываете его в тег а. Сейчас это div.
    Телефон и почта в футере это тоже ссылки. Адрес скорее всего ссылка на страницу с контактами и картой.

    Очень много пикселей. Почитайте про rem и em в дальнейшем. С определённого разрешения есть горизонтальный скрол, найдите элмент, который не вмещается. Можно удалять по очереди блоки, чтобы быстрее найти.
    Хорошая работа для двух месяцев:)
  • Как добавить скрипт для выбранного чекбокса?

    FinGanapre
    @FinGanapre
    PHPdontLang, например. А так, можно найти много способов через гугл по "radio button with icon" А как замените на иконку, то там хоть флажки хоть велосипеды. вот что-то под ембер, не уверен что именно то, т.к. вопрос стилизации судя по описанию не решается. Ещё такое есть, но последняя публикация 9 месяцев назад и видимо всё заброшено.
  • Как добавить скрипт для выбранного чекбокса?

    FinGanapre
    @FinGanapre
    Не совсем понял, что значит "переход именно в него" и если не нужно выбирать более одного, может вам не нужны чекбоксы, а нужны радио кнопки? Может вообще select option. Или вы пытаетесь сделать табы?
  • Почему pаз через раз прогружаются изображения?

    FinGanapre
    @FinGanapre
    mamai211295, На пк тож не прогружается. Дело не в телефоне, а в том, что сервер не отдаёт статику нормально. После первой загрузки ресурсы кэшируются и со второго раза удаётся получить всё до того, как сервер отваливается. Поэтому, ctrl + f5 чтобы загрузить без кэша и увидеть ошибки в консоли.
  • Сервер Express в nuxt, как настроить?

    FinGanapre
    @FinGanapre
    shock_rd, Запуститься всё. nuxt я просто передал как middleware в файле index.js (app.use(nuxt.render)). Если посмотрите в конце после инициализации nuxt у вас запуститься app.listen. Можно не выносить express в отдельный файл (app.js), но я так делаю для большей чистоты
  • Как настроить особенности работы с дробями в JavaScript?

    FinGanapre
    @FinGanapre
    Jkristo ‣, если 6, то как вариант умножать всегда на 1000000 и делить получившийся результат на 1000000. Т.е. складывать целые числа, а потом из них получать то, что должно было быть. Но тут можно упереться в максимальное число ( 9007199254740991 )

    const sum = ( a, b ) => numAfter(numBefore(a) + numBefore(b))
    
    const numBefore = n => n * 1000000
    const numAfter = n => n / 1000000
    
    console.log( sum(0.2, 0.01) )
    console.log(sum(0.02, 0.01))


    Вариант с toFixed (важно привести каждое число в отдельности к 6 знакам, если только сумму приводить то она уже включит в себя погрешность этих дробей):
    const sum2 = ( a, b ) => +(+a.toFixed(6) + +b.toFixed(6)).toFixed(6)
    
    console.log(sum2(0.2, 0.01))
    console.log(sum2(0.02, 0.01))


    Это всё, что я могу предложить по данному вопросу. Проверьте на большем количестве слагаемых.
  • Как настроить особенности работы с дробями в JavaScript?

    FinGanapre
    @FinGanapre
    Jkristo ‣, А какое-то ограничение по числам после запятой же есть? Если да, то используя Number(x).toFixed(n) можно решить данную проблему. Т.е. все числа до вычисления (если они уже могут быть с подобной неточностью) и число после вычисления (результат) оборачивать в данную конструкцию. Но полностью (во всех случаях) это будет работать только с toFixed(1).
  • Почему стили и скрипты не грузятся при динамическом url?

    FinGanapre
    @FinGanapre
    Артем фамилия, Если в шаблонах указан верный путь до статических файлов и в express вы сконфигурировали отдачу статики правильно, согласно документации, то никаких проблем не будет.

    Если вы использовали данный вариант:
    app.use(express.static(path.join(__dirname, 'public')))


    То в шаблонах пути до папок с css и js должны быть:
    <link rel="stylesheet" href="/css/main.css">
    <script src="/js/main.js"></script>


    При условии, что статика подключена в index.js и структура каталогов следующая:
    index.js
    public/css/main.css
    public/js/main.js
  • Как получить значение input в таблице?

    FinGanapre
    @FinGanapre
    yeezussniper, работать будет и так (технически, логически я не знаю вашу задачу), но в проектах обычно есть ограничение на длину строки, так что никто не мешает вам перенести, добавив фигурные скобки к стрелочной функции и искать элементы только один раз, сохранять в переменную, а потом доставать из псевдо-массива (NodeList). Если выполняете арифметические операции со значениями из DOM, то лучше всегда приводить к числу предварительно (т.к. '15' + '10' = '1510'). Либо через parseInt/parseFloat, либо просто добавляя + перед предположительно строковым значением. В вашем случае вы вычитаете и тут в любом случае будет перевод в число, но если вдруг захотите сложить будет не очень)

    list.forEach( tr => {
      // один раз нашли все inputs и сохранили в переменную
      let inputs = tr.querySelectorAll('input')
      // дёргаем их из псевдо-массива
      inputs[3].value = +inputs[1].value - +inputs[0].value
    })
  • Как получить значение input в таблице?

    FinGanapre
    @FinGanapre
    Не по теме, но если строки выводятся циклом, то почему у строк статичный id (rowElem)? У вас будет несколько элементов с одинаковым id на странице. Видимо, не уследили:)
  • Как передать результат request запроса во внешнюю переменную?

    FinGanapre
    @FinGanapre
    rockwell323, ваш код должен выполняться внутри асинхронной функции и тогда через await. Либо, в блоке then. В данном варианте - никак. Оберните всё в асинхронную функцию и получите внутри неё результат с myFunction.

    В node.js у вас всё будет организовано внутри асинхронной функции и вы спокойно будете использовать await.
    При этом, вы будете делить код на маленькие модули, которые будут экспортировать асинхронные (чаще всего) функции.

    И всё будет соединяться вместе без проблем.
  • Как форматировать дату?

    FinGanapre
    @FinGanapre
    Сергей Соколов, Unix тож ок, но его придётся умножать на 1000 на фронте. А iso я просто передал и радуюсь жизни. codepen. Ну а так, можно разные форматы выдавать по требованию. И основной формат выбирать другой.
  • Как форматировать дату?

    FinGanapre
    @FinGanapre
    Aetae, Ещё лучше с бэка всегда iso отправлять, как я и поступаю:) Спасибо за вариант:)
  • Как форматировать дату?

    FinGanapre
    @FinGanapre
    Сергей Соколов, ага, с не ISO датами так себе. А жаль. Спасибо за поправку:)
  • Как передать результат request запроса во внешнюю переменную?

    FinGanapre
    @FinGanapre
    rockwell323, продолжать вложенность кода не нужно. Нам ведь для этого и нужны промисы вместо колбэков:) Соединяйте then в цепочки. При этом блок catch должен быть только один в самом низу. Если в одном из промисов произойдёт ошибка - она упадёт в этот catch и вы сможете её обработать.
    Ну и на бэке без полифилов можно использовать async/await. просто привыкните, что ваша функция всегда должна быть асинхронной, чтобы использовать в ней await. Там вообще нет вложенности. Единственное, прочитайте про Promise.all и Promise.race. Пригодиться, когда нужно единовременно (на самом деле, почти единовременно, т.к. event loop) отправить несколько асинхронных запросов.

    Ну и вот + вот для большего погружения
  • Как передать результат request запроса во внешнюю переменную?

    FinGanapre
    @FinGanapre
    rockwell323, чтобы использовать then, нужно, чтобы возвращался promise. В вашем случае, вы не возвращаете промис из функции. Вы дожидаетесь выполнения запроса внутри асинхронной функции используя await и после этого просто возвращаете результат в никуда.

    Что бы получить результат выполнения myFunction следует обернуть код в асинхронную функцию и используя await получить результат. Вне асинхронных функций нельзя использовать await.

    async function myFunction() {
      const response = await axios.get('example.com');
      return response;
    };
    
    const some = async () => {
    
    const res = await myFunction()
    }


    Вот пример того, как это может выглядеть на промисах:
    // для демонстрации воспользуемся fake api jsonplaceholder.typicode.com
    // будем выполнять запросы на данный ендпоинт: http://jsonplaceholder.typicode.com/posts
    
    // функция вернёт нам Promise, т.к. axios.get возвращает промис
    const getData = url => axios.get(url)
    
    // У promise есть resolve (всё хорошо) либо reject (ошибка)
    getData('https://jsonplaceholder.typicode.com/posts')
      // then ловит resolve (в случае успеха, этот код будет выполнен)
      // мы получим объект в котором данные будут храниться в свойсте data
      // используя деструктуризацию, получим свойство data
      // если нужен доступ к другим полям объекта, перечислите их через запятую
      // или не пользуйтей деструктуризацией и заберите весь объект
      // .then( res => console.log(res) )
      .then( ({ data }) => console.log(data) ) 
      // catch ловит reject
      .catch(err => console.log(err))
      // finally исполняется в любом случае
      .finally(() => console.log('finally'))
  • Как решить эту проблему?

    FinGanapre
    @FinGanapre
    Для начала, код нужно выложить в песочницу или хотя бы использовать вставку кода в редакторе на сайте. Так вы быстрее получите ответ на вопрос. В идеале, выкладывать не всё, а конкретизировать проблему. Взять простой пример, где будет только то, что необходимо.
  • Почему не создается Vue проект через vue-cli?

    FinGanapre
    @FinGanapre
    Rufix, Нужно прикручивать другой репозиторий. На убунту так же было. С другого репозитория установится свежая и прекрасная, есть в инструкциях на сайте node.js как я помню.