Ответы пользователя по тегу JavaScript
  • Почему body без цвета?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Можно использовать для этого getComputedStyle
    Ответ написан
    Комментировать
  • Почему не сбрасывается таймер в js?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Вероятно потому что начальное значение таймера у вас завязано на текущее время

    var now = new Date(),
                                    times = [
                                        0 - now.getHours(),
                                        25 - now.getMinutes(),
                                        59 - now.getSeconds(),
                                    ],


    UPDATE

    кроме того, строка clearInterval(times) работает не так, как вы, вероятно этого ожидаете. Она нужна, чтоб отменить запуск интервального таймера. Принимает на вход id этого таймера, вы же туда передаете массив с значением таймера.
    Ответ написан
  • Где искать программистов для проекта?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Давайте сначала про дороговизну )

    Как правило, найти сильного разработчика, работающего на себя, за которым не нужен отдельный проджект-менеджер, аналитик в помощь и тестировщик, это редкость и если рассматривать индивидуальных разработчиков, то сейчас сильные фронтендеры, которые обладают достаточным объемом как технических, так и коммуникационных навыков, зарабатывают в районе 170-250к до вычета налогов в компаниях, где за них платят еще и страховые и пенсионные отчисления и где они имеют оплачиваемый отпуск. За эти деньги такой разработчик работает условные 8 часов (по факту, 6 - это обычно максимум) в день в течение 248 рабочих дней. При этом, у работодателя у него есть еще 28 дней отпуска, что уменьшает количество рабочих дней до 220, практически не уменьшая сумму его зарплаты.

    Соответственно, опытный разработчик, который разбирается в рынке, запросит как минимум 170000 * 12 / 220 = 9272 руб/день, а более уверенный в себе - все 13636 руб/день, что является вилкой от 1159 руб. до 1704 руб (или от $18 до $27) в час при 8-часовом рабочем дне (а при 6-часовом от $24 до $36), что для мирового рынка является достаточно низкой ставкой для таких услуг. Эту сумму вы можете считать некой планкой качества, ниже которой риски взаимодействия с недостаточно опытным разработчиком существенно возрастают.

    Теперь по вашему вопросу: разработчикам с такой ставкой интереснее работать на зарубежных заказчиков и продвигаться на upwork.com им, вероятно, будет комфортнее, чем работать на российском рынке. Я сам много лет работал на апворке и по себе, например, могу сказать, что на заказы со ставкой >$35 уже обращал внимание. Моя гипотеза в том, что $25-35 это нижняя планка, за которую можно найти разработчика и искать лучше именно там (хотя есть и другие биржи, но делюсь своим личным опытом) и именно там они обитают и я слышал много историй успеха (и в т.ч. был ей), где люди и компании находили очень достойных исполнителей. Важный момент только брать проверенных исполнителей с хорошими отзывами.

    Хорошая новость в том, что дешевле также можно найти сильного разработчика, но контроля ему нужно будет больше, либо какая-то из важных составляющих работы будет западать. Но всегда есть алмазы без отзывов, либо люди, кто стесняется просить больше, либо у кого плохо с английским и они готовы работать с российскими заказчиками. Тут уж как повезет и могу только пожелать удачных поисков )

    С уважением,
    Иван Томилов
    CEO of Athanor
    Ответ написан
    Комментировать
  • Почему не происходит замыкание?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Потому что при каждом клике count создается заново. Чтоб брать count из замыкания, стоит вынести его куда-то повыше, например так.
    Ответ написан
  • Как добраться до переменной в объекте?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Это очень похоже на vue. Если это он и это код вашего компонента, то все и так должно работать.
    Если это не он, то просто замените this на app.data(), т.к. this в данном случае указывает на methods.
    Ответ написан
    1 комментарий
  • Где в данном случае создалась переменная?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Во первых, для меня было странным то, что при вызове конструкции new F( ) не создался объект, ну в принципи я допустил, что в переменную b записалась возвращаемая из функции F( )

    А это, кстати, происходит потому что вы возвращаете не примитивное значение в функции-конструкторе.

    Подробней

    Если хотите получить a в объекте, возвращенном функцией, конструктором, нужно убрать returnиз F
    Ответ написан
    1 комментарий
  • Как передать компонент в качестве пропса?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Информация от одно компонента к другому в реакте можете предеаваться через пропсы, как и требуют сделать в задании.
    Вот так это будет работать — Демо
    Ответ написан
    Комментировать
  • "неудача канала CORS preflight" - как решить?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    preflight-запросы делаются с другого хоста и методом является OPTIONS.

    В целом, у вас все написано правильно и проверка будет зависеть от того, где и как вы хостите сервис. В целом, шаги следующие:
    1. Если вы пишете эти директивы в .htaccess, то убедитесь, что у вас выставлен AllowOverride All в конфигах /etc/apache2 и .htaccess подхватывается.
    2. Убедитесь, что у вас включен mod_headers, выполнив команду a2enmod headers.
    3. Воспользуйтесь, например, https://www.test-cors.org/ для проверки того появился ли доступ.

    Если у вас на shared-хостинге это и вы не можете выполнить эти действия, обратитесь в техническую поддержку с вашим вопросом как решить эту проблему.

    Удачи в решении вопроса )

    С уважением,
    Иван Томилов
    CEO of Athanor
    Ответ написан
    2 комментария
  • Как получить значение после выполнения асинхронной функции?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Что-то странное творится либо в нейминге, либо в логике. Зачем вам там рекурсия? Почему item.name имеет тип Number?

    Так или иначе, лучше вам будет не мутировать в асинхронных функциях какое-либо глобальное свойство. Объявляйте массив прямо там и там же работайте с ним, если его нужно прокинуть внутрь очередного вызова функции, передавайте его как аргумент.
    А затем сделайте так, чтоб функция doMassiv вернула этот массив.
    Далее уже в showMassiv принимайте этот массив и сохраняйте глобально, раз это вам нужно.

    А еще хочу заметить, что вы забыли добавить await перед рекурсивным вызовом this.doMassiv(item.name), вероятно поэтому происходит вот это:
    public async showMassiv() {
        await doMassiv(400)
        console.log(this.massiv.length)  
       //здесь в консоль выводится длинна массива после первого прохода doMassiv
    }


    UPDATE
    Как справедливо заметил Алексей в комментах, await и не будет работать внутри forEach, вот по этим причинам. Следовательно, стоит заменить его на обычный цикл for, или написать asyncForEach, как в статье
    Ответ написан
    2 комментария
  • Как сделать отступ при скроле страницы?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Самый простой способ: сделать скролл в 2 шага и после scrollIntoView вызывать доскрол на нужное кол-во пикселей, типа такого
    window.scrollBy({
      top: -10,
      left: 0,
      behavior: 'smooth'
    }); //

    Но если хотите плавности, вам придется, вероятно, отказаться от scrollIntoView, получать координаты верхушки вашего anchor, менять их на нужное кол-во пикселей и вызывать window.scrollTo, передавая туда координаты в параметр top

    Добавил демо
    Ответ написан
    1 комментарий
  • Как компилировать ES6 налету?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    У babel на оффсайте есть онлайн транспилер, если открыть консоль, видно, что никакие запросы при транспиляции на сервер не улетают. Далее идем в гитхаб бейбеля и находим там исходники их сайта, ищем там функцию, которая вызывается для транспиляции. Находим и радуемся)
    Ответ написан
    7 комментариев
  • Как подвесить событие vue?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Все таки подозреваю, что вы неправильно подписывались на событие в родителе. Я вынес ваш компонент в песочницу, подписался в родителе на onplus и onminus и все работает. Демо
    Ответ написан
  • Как сократить условие цикла?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    for(; i<5; i++) {...}
    будет работать, если у вас где-то выше по коду i объявлена и при этом имеет тип Number.

    Вот так, например:
    var i = 0;
    for(; i<5; i++) {console.log(i)}
    Ответ написан
    2 комментария
  • Почему я не могу получить значение инпута?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Удалось починить вашу песочницу. Она не работала, потому что js начинал выполняться до окончания загрузки html.

    Снизу добавил кнопку, которая выводит содержимое инпута в консоль, все работает, если в инпуте есть какое-то значение, оно выводится.
    Ответ написан
    1 комментарий
  • Как работать в цикле с большими числами?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Для работы с большими числами можно использовать BigInt, добавленный совсем недавно.
    работать будет это примерно так:
    let index = 1000000000000000000000n;
    index += 1n;
    console.log(index);


    Но для лучшей поддержки браузерами, конечно пока что рекомендуется делать это через полифил
    Ответ написан
    2 комментария
  • Как использовать скрипт один раз, а не вставлять его каждый раз?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Вынесите его в отдельную функцию и передавайте нужные параметры, которые могут изменяться от вызова к вызову в качестве аргументов.

    function getJsonAndUpdateTable(jsonPath) {
      $.getJSON(jsonPath, function (data) {
          $(data).each(function(index, item) {
          $('#table').append(
              '<tr><td class="col1">'+ item.title01 +'</td><td class="col2">' + item.shopcode + '</td><td> <a href="' + item.link + '">' + item.title + '</a></td><td class="col3">' + item.cost + '</td></tr>'
              );
          });
      });
    }

    А далее вызывайте эту функцию где необходимо и передавайте внутрь путь к нужному json файлу.
    Ответ написан
    1 комментарий
  • Оптимизация vuex?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    1. Изменение положения элемента через абсолютное позиционирование работает медленней чем через transform. Попробуйте переделать left/top на transform: translate.
    2. Есть в css волшебное свойство will-change, попробуйте подключить его.
    3. Вам в ответах уже советовали попробовать использовать throttle, это точно стоит сделать, наглядно о том, как это работает и в чем разница с debounce — тут
    Ответ написан
    9 комментариев
  • В чем идея Mobile First подхода?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    1. Mobile first подразумевает определенный процесс работы ближе к продуктовой разработке. Здесь важно не сделать все экраны сразу, а постепенно версия за версией выкатывать функционал. На мобильных экранах функционал ограничен устройством, а на настольных экранах он шире.

    Представьте что будет, если начать с настольных экранов: вы проектируете интерфейс, внедряя туда весь желаемый функционал, выкатываетесь, а через месяц понимаете, что это не реализуемо на мобильных. Получается, что ваши дизайн решения с самого начала начинают «накапливать ошибку» всё это позже вскрывается и вы вносите изменения во ВСЕ экраны и плюсом это ещё нужно переделать на этапе разработки, что очень дорого. Если же использовать mobile first, то вы усложняете интерфейс эволюционно, добавляя фичу за фичей от простого — к сложному, и тогда, в случае ошибки, откатиться придется всего на шаг назад.

    Если подытожить, то можно и так и так, действительно, особенно если вы работаете с заказной разработкой, когда надо просто «задизайнить» и отдать все экраны сразу и забыть. Но в условиях, продуктовой разработки, когда нужно экономить ресурсы, mobile first выглядит эффективней.

    2. Видимо ещё дело в том, что мобильный трафик несколько лет назад превысил десктопный.
    Ответ написан
    Комментировать
  • Почему eslint не исправляет лишние отступы?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Вероятно, нужно добавить в настройки вот такое правило:
    https://eslint.org/docs/rules/no-multiple-empty-lines
    Ответ написан
    5 комментариев
  • Как изменить код JavaScript, чтобы данные брать из файла .json?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Добавить подобный метод и вызывать его для установки data
    Ответ написан
    Комментировать