Выполняем реальный проект на JavaScript | ч.4 - Форма-калькулятор

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ม.ค. 2025

ความคิดเห็น • 39

  • @АлександрАндреевич-в3э
    @АлександрАндреевич-в3э ปีที่แล้ว

    Всім привіт! Дякую за Ваше відео! Навчаємося в 2023 попри все

  • @j-lewis
    @j-lewis ปีที่แล้ว +1

    Спасибо большое, это просто отвал бошки!

  • @pahaivanov1611
    @pahaivanov1611 3 ปีที่แล้ว +2

    Потрясающе! 2022 все работает, кайф!)

  • @dmitriystoyanov933
    @dmitriystoyanov933 4 ปีที่แล้ว +2

    Круто! Это не тяп-ляп, а реальный уровень, такие ребята мотивируют, спасибо!

  • @oleksandrvorzhev5026
    @oleksandrvorzhev5026 4 ปีที่แล้ว +3

    Мощно, сразу видно уровень исполнителя..

  • @BogdanRedkin
    @BogdanRedkin 3 ปีที่แล้ว +1

    Спасибо! Отличный урок)

  • @Amourphys
    @Amourphys 3 ปีที่แล้ว +1

    Спасибо большое за урок, у меня все получилось, нужно просто все делать очень внимательно, из-за этого были ошибки

  • @awenn2015
    @awenn2015 4 ปีที่แล้ว +3

    Я по-любому на этом этапе начал бы городить тонны бесполезного кода, как всегда все усложняя, как научиться использовать такие же простые способы?

  • @hiver11
    @hiver11 4 ปีที่แล้ว +2

    Иван, добрый день!
    А почему мы следующие валидации поместили в changeModalState.js, а не в forms.js?
    checkNumInputs("#width");
    checkNumInputs("#height");
    По-идее, ведь, это не относится никак к модулю changeModalState.
    Да, и второй момент, есть баг. У нас по умолчанию выбрано деревянное остекление. Если мы не будем выбирать другой вариант, то деревянное остекление не запишется в state.

  • @ВиталийАбраменко-ф3н
    @ВиталийАбраменко-ф3н 5 ปีที่แล้ว +3

    Контент очень хороший. Спасибо Иван. Только что то просмотров маловато.

    • @campfireschool
      @campfireschool  5 ปีที่แล้ว

      Лайкайте, делитесь :)

    • @oleksandrvorzhev5026
      @oleksandrvorzhev5026 4 ปีที่แล้ว +1

      @@campfireschool будет много просмотров, не первый раз нахожу каналы с крутым контентом и не разу не видел ,что бы они не выстреливали. В один один момент попрут просмотры и все.

    • @ТарасКлімарчук2-12ФІТ
      @ТарасКлімарчук2-12ФІТ 4 ปีที่แล้ว

      мало кто доходит до такого уровня). Гораздо выгодней клипать ролики по основам

    • @Алексей127-г6э
      @Алексей127-г6э 2 ปีที่แล้ว

      @@campfireschool Иван, пожалуйста дайте ссылку или создайте видео, для только только вот "подснежников", не могу реализовать практику.
      1. создаем кнопку( тут понятно)
      2. кнопка 1 на экране, после ее нажатия всплывает модульное окно с простыми действиями, посчитать или умножить.
      Не понимаю как реализовать данный замысел для практики...

  • @aleksandrstaetskiy5687
    @aleksandrstaetskiy5687 5 ปีที่แล้ว +1

    Очень полезный видос, спасибо! Тоже реализовывал подобный кейс

  • @abaydotdev
    @abaydotdev 4 ปีที่แล้ว

    Спасбо огромное за такой отличный контент!

  • @ВячеславИванов-д1р
    @ВячеславИванов-д1р 4 ปีที่แล้ว

    Если не клацать в самом начале по выбору формы окна (например клиента устраивает форма по умолчанию 1 таб) и в select тоже оставить по умолчанию (деревянное окно), то эти данные не передаются на сервер - array(5) {
    ["user_name"]=>
    string(10) "слава"
    ["user_phone"]=>
    string(8) "12345678"
    ["width"]=>
    string(3) "100"
    ["height"]=>
    string(3) "200"
    ["profile"]=>
    string(12) "теплое"
    }

  • @ОлегН-е3ю
    @ОлегН-е3ю 4 ปีที่แล้ว +2

    Чет сложное дз) Как сделать валидацию не пойму. Еще проблема в том, что если пользователь не выберет тип окна на первой модалке или тип остекления, где селект, то в стейт ничего не заносится, хотя это как бы значения по умолчанию. Может быть надо иницилизировать стейт с дефолтными значениями?

    • @АннаШвецова-б7ъ
      @АннаШвецова-б7ъ 4 ปีที่แล้ว +2

      Вот да))) я тоже потупила. И не уверена, что мое решение красивое. Правда работает. Лучше я не придумала. Оправдываю себя тем, что я не просто не джун, а недобейби пока что в js)))))) Если кто укажет на корявости и подскажет, как красиво, буду благодарна.
      в main js в вызов функции modals, добавила modalState -> modals(modalState);
      И в файлу modals.js в части, где обрабатывается событие по клику на триггер, поменяла код:
      const modals = (state) => {
      function bindModals(triggerSelector, modalSelector, closeSelector, closeOnClick = true) {
      const trigger = document.querySelectorAll(triggerSelector),
      modal = document.querySelector(modalSelector),
      close = document.querySelector(closeSelector),
      allModals = document.querySelectorAll('[data-modal]');
      trigger.forEach((item) => {
      item.addEventListener('click', (e) => {
      if (e.target) {
      e.preventDefault();
      }
      function hide() {
      allModals.forEach((item) => {
      item.style.display = 'none';
      });
      modal.style.display = 'block';
      document.body.style.overflow = 'hidden';
      }
      switch (modalSelector) {
      case '.popup_calc_profile':
      if (!state.width || !state.height) {
      alert('укажите размер окна');
      } else {
      hide();
      }
      break;
      case '.popup_calc_end':
      if (!state.profile) {
      alert('выберите профиль');
      } else {
      hide();
      }
      break;
      default:
      hide();
      break;
      }
      });
      });
      close.addEventListener('click', () => {
      allModals.forEach((item) => {
      item.style.display = 'none';
      });
      modal.style.display = 'none';
      document.body.style.overflow = '';
      });
      modal.addEventListener('click', (e) => {
      if (e.target === modal && closeOnClick) {
      allModals.forEach((item) => {
      item.style.display = 'none';
      });
      modal.style.display = 'none';
      document.body.style.overflow = '';
      }
      });
      }
      function showModalAfter(selector, time) {
      setTimeout(() => {
      document.querySelector(selector).style.display = 'block';
      document.body.style.overflow = 'hidden';
      }, time);
      }
      bindModals('.popup_engineer_btn', '.popup_engineer', '.popup_engineer .popup_close');
      bindModals('.phone_link', '.popup', '.popup .popup_close');
      bindModals('.popup_calc_btn', '.popup_calc', '.popup_calc_close', false);
      bindModals('.popup_calc_button', '.popup_calc_profile', '.popup_calc_profile_close', false);
      bindModals('.popup_calc_profile_button', '.popup_calc_end', '.popup_calc_end_close', false);
      // showModalAfter('.popup', 6e4);
      };
      export default modals;

    • @aleksgavrilovcoach
      @aleksgavrilovcoach 4 ปีที่แล้ว

      @@АннаШвецова-б7ъ я тоже не особо пока силен в js, поэтому пришлось посидеть над решением, и это как снежный ком - начинает одно за другое цепляться и размер кода разрастается))) я тоже осуществил проверку заполненности полей за счет наличия требуемых свойств у объекта modalState, но без использования alert, после отправки формы еще нужно удалить все свойства у объекта modalState, т.к. чтобы не было багов, если пользователь снова откроет это модальное окно, ну и очистка не только инпутов, но также селекта, чекбоксов и возвращение табов выбора формы в первоначальное значение. Решение выложил на гитхаб github.com/arokokko/plastic_windows/tree/calculator , branch 'calculator' последние 3 коммита посвящены этому, кому будет интересно заглядывайте, предлагайте свои доработки

    • @programmingerror1444
      @programmingerror1444 3 ปีที่แล้ว

      @@aleksgavrilovcoach Да, спасибо большое за то, что код выложил, а то я 4 часа сидел мучался решал. Но зато реализовал другие функции которые ты не сделал. Как успехи сейчас?

  • @daniilkuzmichev466
    @daniilkuzmichev466 5 ปีที่แล้ว +1

    Привет! Я ученик с beonmax! Очень круто все доходит! Замечательный преподаватель! Можно вопрос? Я прохожу курс веб-разработчик 2019. Следующий курс - кончено же полный Js. Можно ли создавать сайты(хотя бы одностраничные) зная html и Js. И конечно же компиляторы и всё то, что входит в данные курсы =)

    • @campfireschool
      @campfireschool  5 ปีที่แล้ว

      Daniil Kuzmichev добрый день) да, конечно же можно)

    • @daniilkuzmichev466
      @daniilkuzmichev466 5 ปีที่แล้ว

      Прошу прощения, но я задам еще вопрос. Что вы думаете о Python? Я собираюсь его изучать после Js.

    • @abaydotdev
      @abaydotdev 4 ปีที่แล้ว

      @@daniilkuzmichev466 Советую пока сконцентриваться на одном языке и когда уже комфортно будешь себя чувствовать в этом языке, то уже особых проблем не будет переходить на другие, так как основы то одни у них всех.

  • @JesseJames-mh5kb
    @JesseJames-mh5kb ปีที่แล้ว

    А зачем для каждого шага создавать отдельную модалку? не лучше ли сделать одну модалку, в которой и будут все шаги?

  • @КонстантинК-у1х
    @КонстантинК-у1х 5 ปีที่แล้ว

    Отлично все объясняете.
    Архитектура эта модульная на основе import доступна благодаря webpack? Если gulp сборка, то просто файлы с модулями склеивать или в одном файле все делать?

    • @campfireschool
      @campfireschool  5 ปีที่แล้ว

      Константин К да, именно webpack собирает все модули в один файл.
      Если без него - то придется весь код прописывать в одном файле, что не есть круто)

    • @awenn2015
      @awenn2015 4 ปีที่แล้ว

      @@campfireschool а как реализовать подключение модулей без него,? А то не сильно понимаю нужен ли он в простых проектах как и сам gulp

  • @expertnadivane123
    @expertnadivane123 4 ปีที่แล้ว +2

    номер телефона в буквах ушел после калькулятора окна

  • @H1roHamada
    @H1roHamada 4 ปีที่แล้ว

    по стандарту в селекте выбран тип деревянного остекления, и если пользователь не трогает селект, то этот тип не запоминается, как пофиксить?
    Как сделать тип по дефолту?
    Единственное решение, которое я знаю, это вместо уже выбранного типа сделать надпись "выбрать тип" и по клику уже открывать список

  • @виртуоз_ру
    @виртуоз_ру 4 ปีที่แล้ว

    Класс

  • @animalsgood6964
    @animalsgood6964 2 หลายเดือนก่อน

    Смотреть на скорости 0.5 в самый раз, можно успеть понять что говорит и код рассмотреть

  • @ggg-tq9be
    @ggg-tq9be 3 ปีที่แล้ว

    может не чекбоксы, а инпуты? Доступность, все дела

  • @alexcherepanov6152
    @alexcherepanov6152 5 ปีที่แล้ว +1

    ту мач сложно, это сколько надо лет задрачивать js чтоб так писать?)

    • @campfireschool
      @campfireschool  5 ปีที่แล้ว +2

      alex cherepanov пару месяцев 🙂

    • @awenn2015
      @awenn2015 4 ปีที่แล้ว

      @@campfireschool как учился ?

    • @Kalyancheg
      @Kalyancheg 2 ปีที่แล้ว

      @@campfireschool прошел теоретический курс (11 часов), слушаю уроки и понимаю, что сам не написал бы ничего, как тренировать именно самостоятельное написание кода?

    • @Kalyancheg
      @Kalyancheg 2 ปีที่แล้ว

      @@campfireschool как практиковались?