Контакты

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (21)

Лучшие ответы пользователя

Все ответы (67)
  • Почему не работает функция в браузере?

    @MrDecoy
    Верставший фронтендер
    function nameOfFunction () {
    alert (2+3);
    }

    nameOfFanction(); // опечатка.

    Вам редактор должен был предлагать автодополнением название Вашей функции (при попытке вызвать её), если бы Вы его использовали, то не было бы опечатки.
    Так же рекомендую научиться пользоваться линтером. (ESLint)
    Ответ написан
  • Что позволяет записывать в функции статические методы?

    @MrDecoy
    Верставший фронтендер
    Воспользуюсь спорным штампом и отвечу: так происходит, потому что "в JS всё - объект". Соответственно, как объектам, мы можем назначать свойства.
    С примитивами всё несколько сложнее. Мы вроде бы тоже можем назначить им свойство, но это иллюзия. Когда мы делаем подобное с примитивами, например строкой, то вызывается её конструктор String(), а когда операция "под капотом" завершается, то мы снова получаем примитив, таким образом, ошибки назначения свойства не возникает, но и свойство недоступно.

    Это если сжато.
    Подробно объяснять не быстро. Скорее всего Вам тут посоветуют почитать документацию, спецификацию. Я предложу почитать серию книг You Dont Know JS. Можно нагуглить перевод многих глав из этой серии книг.
    Ответ написан
  • Как сделать так, если до окончании таймера пользователь перекрасил/закрасил все path в SVG картинке, остановить таймер и вывести ALERT?

    @MrDecoy
    Верставший фронтендер
    1) Сохранять id таймера в соответствующем замыкании. Ну или хотя бы в глобале.
    то есть window.gameTimer = setTimeout()... Можете возвращать id таймера из функциие timer().

    2) Добавить для всех необходимых элементов, которые пользователь должен закрасить структуру данных.
    Например:
    {
    element: state
    }
    где element - ключ, который однозначно определяет элемент(уникальное значение дата атрибута, например(
    а state - значение. Например, 0 - не закрашено, 1 - закрашено.

    3) По факту клика на элемент(рекомендую через деллигирование) проверять что все элементы имеют состояние 1. И есть это истинно, то обнулять таймер через clearTimeout и перенаправлять на страницу результата или что там ещё Вам нужно.

    4) Profit.
    Ответ написан
  • Как избавиться от начального значение в useState?

    @MrDecoy
    Верставший фронтендер
    У Вас нет проблемы, которую Вы описали, потому что это работает несколько не так, как Вы, я полагаю, думаете.
    const Logic = () => {
      const [inputValues, setInputValues] = useState('');
      console.log('1)', inputValues);
      const onChangeInput = e => {
        setInputValues((currentState) => {
          console.log('2) current', currentState); 
          return e.target.value});
        console.log('3)', inputValues);
      };
    
      return <View inputValues={inputValues} onChangeInput={onChangeInput} />;
    };
    
    // Будем вводить букву 'a' в инпут. В итоге в консоле получим:
    // 1)"" <-- из-за useState('');
    // 2) current "" <-- так как значение мы ещё не обновили, то получаем то же начальное значение из useState('');
    // 3) "" <-- вызвывается ПОСЛЕ setInputValues, тем не менее, имеет ещё не обновлённое значение.
    // 1) a <-- произошло изменение состояния, компонент перерисовался.


    Дальше, в заивисимости от того, что Вы хотите сделать,
    выводите значение либо в "1)" - это вывод с новым state но перед перерисовкой,
    либо в "3)" Вам нужно выводить e.target.value.

    Операция изменения состояния - асинхронная и реакт может собирать несколько изменений состояния в одно для оптимизации.
    Ответ написан
  • Как реализовать такой эффект?

    @MrDecoy
    Верставший фронтендер
    Итак, для этого вам понадобится:
    1. Медиафайл, который доложен вот так вот выпрыгивать(картинка, анимация, да хоть видео)
    2. Добавить этот медиа на страницу. и обернём его в div с классом, какой вашей душе угодно. Но лучше чтобы название намекало на суть элемента - что это какой-то выскакивающий блок. Скажем, toast(как тост из тостера)
    3. Делаем ему position: fixed и размещаем с помощью right И bottom так, чтобы его не было видно на экране.(right и bottom - чтобы не зависеть от размера экрана и он всегда был в одном месте)
    4. Так же опишем класс модификатор, например, toast_active, в котором будут стили отвечающие за позиционирование. Так, чтобы элемент было видно. То есть toast_active должны содержать такие bottom и right, чтобы элемент был на экране.
    5. Ну и далее нужен элемент триггер - по нажатию который надо добавлять класс toast_active на наш элемент. Например, через js.
    6. Внутри обработчика сделать таймер(setTImeout) на нужное вам время, через которое нужно скрыть этот элемент снова. В функции таймера убрать класс toast_active.
    7. Если пропишете в классе .toast свойство transition для bottom, то будет ещё и плавно всплывать.
    8. Профит
    Ответ написан