Задать вопрос
  • Почему не обновляется useState?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Если я правильно понял вашу проблему, то это из-за того, что useState принимает аргументом не новое значение стейта, а изначальное/дефолтное. т.е. считываться значение, переданное в аргументах будет всего один раз при первом рендере.
    Чтобы обновлять стейт по пропсу, нужно следить за изменением пропса через useEffect, но возможно вам и не нужен стейт, а можно обойтись обычной переменной.
    Ответ написан
    Комментировать
  • Как отключить скролл на iPhone?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Для сафари одним overflow: hidden не обойтись, он все равно будет скроллить боди, если у него большое содержимое. Нужно костылить. Чаще всего пишу что-то типа этого

    const bodyEl = document.body;
    let lastScrollPos = 0;
    const scrollBodyLock = () => {
        lastScrollPos = window.pageYOffset;
        bodyEl.style.overflow = 'hidden';
        bodyEl.style.position = 'fixed';
        bodyEl.style.top = `-${lastScrollPos}px`;
        bodyEl.style.width = '100%';
    }
    
    const scrollBodyUnlock = () => {
        bodyEl.style.removeProperty('overflow');
        bodyEl.style.removeProperty('position');
        bodyEl.style.removeProperty('top');
        bodyEl.style.removeProperty('width');
        window.scrollTo(0, lastScrollPos);
    }

    (можно часть свойств переписать на css класс, и просто его добавлять/удалять, так код получится чуток проще).

    Просто дергаете scrollBodyLock во время показа меню, и scrollBodyUnlock когда закрываете меню.
    Ответ написан
    Комментировать
  • Можно ли сделать в canvas js анимацию без спрайт-листа?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Анимации в canvas достаточно быстрые, особенно если нет никаких манипуляций типа даунскейла и прочего.
    У вас же ошибка в том, что вы во время отрисовки анимации загружаете картинки, еще и ждете загрузку 512 мс. Или я не так понял код.
    Нужно предзагрузить в Image все картинки, и после загрузки включать попеременный drawImage на эти картинки.

    Собрал на коленке простой пример. Возможно где-то плохо написал, но время позднее, главное суть и демонстрация.

    https://codesandbox.io/s/cut-canvas-animation-k6liw8 (кошак на анимации прыгает, я просто не очень удачно гифку на png порезал).

    Можно хоть 60 кадров в секунду рисовать (или больше для высокогерцовых мониторов), ничего не должно тормозить.
    Для спрайтов тот же самый смысл, только там не меняется картинка, только координаты в drawImage.
    Ответ написан
    1 комментарий
  • Форматирование чисел на js. Как убрать пробелы?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    А вы там для преобразования числа в строку используете toLocaleString, эта функция как раз добавляет пробел при форматировании. Замените на обычный toString
    Ответ написан
    1 комментарий
  • Почему не складываются переменные в функции?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Вы внутри функции пытаетесь изменить переменную из аргумента. Это так не работает

    function all(all1,newall1,newall2) {
        all1 = newall1 + newall2 // all1 это не глобальная переменная, а ваша переменная из аргументов (т.к. такое же название)
        alert(all1)
    }

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

    function all(all1,newall1,newall2) {
        const resultAll1 = newall1 + newall2;
        alert(resultAll1);
        return resultAll1;
    }
    
    const resultAll = all(all1,newall1,newall2)
    Ответ написан
    Комментировать
  • Как сделать цвет текста, такой же как и фон?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Так имеете ввиду?

    Ответ написан
    1 комментарий
  • ESLint: no-param-reassign?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Вариантов несколько.

    1) Итерировать по currLangKeys, так получится, что вы не меняете итерируемое значение.
    2) Добавить на эту строчку // eslint-disable-next-line no-param-reassign
    3) Прописать в ignorePropertyModificationsFor название вашей переменной. Можно придумать какой-то общее название htmlElement, на которое не будет действовать это lint правило. Но это крайне неявный способ, сложно будет держать в голове как должна называться переменная, чтобы на нее не ругалось правило.

    Я за второй вариант, т.к. он явно в коде выражает, что в этой строчке автор понимает что делает. Еще стоит правда подумать над выпиливанием этого правила, если вы на это можете влиять. Оно слишком категорично, и если человек захочет так накосячить с переопределением аргумента/итерируемого массива, он просто скопирует ссылку на объект отдельной строчкой, и eslint правило не заметит подвоха. От дураков не защищает, а не дуракам лишь мешает.
    Ответ написан
    Комментировать
  • Как прокликать canvas, который находится поверх header?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Если обрабатывать клики канвы никак не надо, то можно на нее повесить свойство pointer-events: none
    Ответ написан
    1 комментарий
  • Какую JS библиотеку использовать для SPA приложения где максимально разграничена логика и верстка?

    Vlad_IT
    @Vlad_IT Куратор тега HTML
    Front-end разработчик
    По своему опыту скажу, что верстать должен разработчик, если мы говорим о сложных приложениях. Компоненты, это часть архитектуры, и будут большие проблемы с переиспользованием компонентов, если компоненты будут придумывать люди, которые пишут плохую логику.

    Можно поступить так - программист декомпозирует задачу, описывает какие компоненты ему нужны на выходе, а верстальщик верстает их без логики (в storybook например).

    Но мое ИМХО - фронтендеры должны уметь хорошо верстать. Верстка это ведь не просто psd/figma to html, это еще и доступность, сложные анимации, это производительность, размер бандлов и куча всего, что нужно учитывать при разработке приложений.
    Ответ написан
    Комментировать
  • Как вставить переменную c +(плюсом) между чисел?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Самый простой и безопасный вариант, реализовать функцию calc(val1, val2, operator), которая внутри себя будет выполнять разные операции над val1 и val2 в зависимости от переданного оператора. Буквально, можно написать вот такой код
    switch(operator) {
        case '+': return val1 + val2;
        case '*': return val1 * val2;
        // ....
    }

    и использовать вот так
    getResult(str) {
          return calc(+str[0], +str[1], this.met);
    },
    Ответ написан
    1 комментарий
  • Как реализовать условный рендеринг в функциональном компоненте React?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Вы можете каждый компонент закинуть в словарь вида

    const COMPONENTS = {
        enterProfile: EnterProfile,
        personalArea: PersonalArea,
        // ...
    }


    и выводить в нужном месте

    return COMPONENTS[activeItem];

    еще вашу задачу решает библиотека react-router, если делаете сложное приложение, есть смысл взглянуть.
    Ответ написан
    1 комментарий
  • Как передать две функции по одному onClick()?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Обычно определяется хендлер события, и в нем вызываются нужные функции

    const handleClick = useCallback((ev) => { // меморизирую, т.к. обработчик передается в компонент а не HTML элемент
        props.go(ev); // более правильно конечно передавать не объект события, а конкретное значение. Функция go не должна ничего знать про событие
        // тут вызов второй функции
    }, []);
    Ответ написан
  • Дайте совет, куда и как двигаться дальше?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Мне кажется, хорошим вариантом будет переезд в Москву/Питер на несколько лет. После чего можно вернуться (или не вернуться), и устроиться удаленно. Без опыта сложно найти удаленную работу, т.к. от удаленщиков требуется самостоятельность, а от джуниоров такое сложно ожидать.

    Фриланс тоже неплохой вариант, если брать заказы, в которых на 80% понимаете что делать. Сделав 3-4 реальных проекта, на собеседовании будет о чем рассказать, да и вы будете лучше на фоне других джуниоров без опыта. Но на фрилансе получить заказ без опыта еще сложнее, чем оффер :) Поэтому лучше придумать себе задачу, реализовать ее и преподносить как реальные проекты.

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

    Отвечайте тут на тостере на вопросы, активный профиль в профессиональных сообществах дает плюс к вашему резюме (знаю о чем говорю).
    Ответ написан
    4 комментария
  • Как скрыть верхний тулбар в сафари?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Если нет скролла, то нереально. Тулбар скрывается только по скроллу вниз, больше никак. Надеюсь, мне тут напишут, что я ошибаюсь, но к сожалению, я уверен, что такого не будет.
    Ответ написан
  • Добрый день, почему съезжают первые два дива?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    vertical-align (который работает при inline-block) дефолтное значение baseline, установите в top
    vertical-align: top
    чтобы выровнить не по линии родительского элемента, а по верхнему краю
    Ответ написан
    Комментировать
  • При наведении менять картину?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    А если попробовать все лого через grayscale делать чб, а bloomberg и borsen через invert? Не уверен, что красиво получится, но стоит попробовать (уверен, в макетах дизайнер так и сделал). Фон лого должен быть синим как фон, синий как раз инвертируется в этот коричневый цвет
    Ответ написан
  • Как сделать такую анимацию?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Крайне простая анимация, делается на чистом CSS + JS (для обработки смены слайда и последовательного включения анимации, если потребуется). В этой анимации все можно решить при помощи transform и opacity. Присмотритесь к видео (лучше скачайте его, чтобы мотать покадрово), разбейте каждый переход по пунктам. Я вижу, что фон через скейл анимируется отдельно от контента, а в контенте каждая строчка анимируется с transform: translateY(100%) в translateY(0%), последние строки еще анимируют переход opacity: 1 в opacity: 0.
    Когда слайд закрывается, весь блок с слайдом анимируется в transform: scale (какое-нибудь число больше единицы).

    Готовый код вам никто не даст, т.к. анимация слишком уникальна. Да и как правило, легче самому сделать анимацию, чем подстраивать чужую под свои нужды/

    Чтобы анимация не получилась глючной, смотрите, какие css свойства вы анимируете, сверяйте с списком https://csstriggers.com/opacity желательно, чтобы ваши свойства в основных браузерах не влияли на геометрию (пункт layout), идеально, чтобы не влияли и на отрисовку (пункт paint).
    Ответ написан
    1 комментарий
  • Как в python отобразить сайт внутри окна?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Стоит конкретизировать вопрос. Если вам нужно в окне вставить браузер, то гуглите по ключевому слову webview, например вот https://github.com/zserge/webview-python В PyQt должен быть виджет QWebView.
    Если хотите писать интерфейс в вебе, а логику на питоне, то посмотрите это https://pywebview.flowrl.com/ если прям все в вебе писать хотите, то вам не нужен питон, вам нужен electron
    Ответ написан
    Комментировать
  • Как использовать padding при scrol и center-выравнивании?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    padding не исчезает, у вас просто вертикальное выравнивание центрирует текст. Вот так проще понять https://jsfiddle.net/Vlad_IT/rm6uz1hx/ я убрал overflow: hidden/scroll и добавил margin. С вертикальным выравниваем симметричный padding ничего не дает. Уберите align-items и все будет ок https://jsfiddle.net/Vlad_IT/rm6uz1hx/2/

    suizsslbr1d4nzx3ugmpxjmk9ic.png
    Ответ написан
    2 комментария