Ответы пользователя по тегу JavaScript
  • Есть ли смысл удалять DOMContentLoaded listener после срабатывания?

    @TheCrossCarrier Автор вопроса
    document.addEventListener('DOMContentLoaded', (event) => {
       ...
    }, { once: true })
    Ответ написан
    Комментировать
  • Как корректно добиться эффекта pointer-events: none на сенсорном устройстве?

    @TheCrossCarrier Автор вопроса
    Достаточно в моём коде доставить строку
    const eventTarget = document.elementFromPoint(event.clientX, event.clientY)
    в событии pointerup чтобы получить элемент над которым отпустили драг.
    Ответ написан
  • Как сделать повтор слайда?

    @TheCrossCarrier


    То, что я изменил в Вашем коде, я выделил комментариями. (в JS и в CSS) (ещё изменил ошибочное употребление transform3d на transform)

    Осталось Вам только прописать else в случаях упирания в края, чтобы не было таких залипаний как сейчас. Если не понятно, я покажу как сделать.
    Ответ написан
    1 комментарий
  • Как получить значения с полей и вставить внутри ссылки?

    @TheCrossCarrier
    Нужно тегу a присвоить класс или id, например, <a class="link".
    Дальше из JS обратиться к этому элементу
    const link = document.querySelector('.link')
    link.href = 'ваш адрес'


    Возможно я не правильно понял или не полностью дал ответ, уточните
    Или можете связаться со мной по дискорду -- помогу. The CrossCarrier#0591
    Ответ написан
  • Как переделать код под ООП?

    @TheCrossCarrier
    1. Вынести в переменные (а лучше в константы const) все элементы HTML. Например, как сделано с PanelMenuLinks
    2. Использовать вместо, например querySelectorAll("#block_panel_menu")[0] getElementById("block_panel_menu")
      А там, где надо нескольким элементам из массива присвоить значения, использовать циклы forEach

    3. Вразброс обращаетесь к элементам, разделите на блоки, делайте отступы логические (пустые строки) между блоками кода, чтоб было понятнее.
      С табуляцией у Вас что-то...


    Отредактировал Ваш код:

    const
      header = document.querySelector('header'),
      logotip = document.getElementById('logotip'),
      registion = document.getElementById('registion'),
      vhod = document.getElementById('vhod'),
      block_panel_menu = document.querySelectorAll('#block_panel_menu')
    
    function block_panel_menu_Height(height) {
      block_panel_menu.forEach(element => element.style.height = height + 'px')
    }
    
    // vhod.innerHTML = '<img style="width: 20px; height: 20px;" src="SiteImage/logo_vhod.svg">'
    let logo_vhod = document.createElement('img')
    logo_vhod.style.width = '20px'
    logo_vhod.style.height = '20px'
    logo_vhod.src = './SiteImage/logo_vhod.svg'
    
    window.onscroll = () => {
    
      if (pageYOffset > 100) {
        header.style.height = '50px'
    
        logotip.style.opacity = '0'
        logotip.style.marginTop = '-20px'
    
        registion.style.display = 'none'
    
        vhod.appendChild(logo_vhod)
        vhod.style.background = 'none'
        vhod.style.width = '30px'
    
        PanelMenuLinks.style.background = 'none'
        PanelMenuLinks.style.zIndex = '-1'
        PanelMenuLinks.style.marginTop = '-45px'
        PanelMenuLinks.style.fontSize = '13px'
        PanelMenuLinks.style.color = '#fff'
        PanelMenuLinks.style.borderTop = '0px'
    
        block_panel_menu_Height(49)
        block_panel_menu_children.style.top = '10px'
      }
      else {
        header.style.height = '70px'
    
        logotip.style.marginTop = '0px'
        logotip.style.opacity = '1'
    
        registion.style.display = 'block'
    
        vhod.innerText = 'Регистрация'
        vhod.style.background = '#626262'
        vhod.style.width = '100px'
    
        block_panel_menu_Height(70)
        block_panel_menu_children.style.top = '20px'
    
        PanelMenuLinks.style.marginTop = '0px'
        PanelMenuLinks.style.background = '#E7E7E7'
        PanelMenuLinks.style.borderTop = '10px solid #fff'
        PanelMenuLinks.style.fontSize = '18px'
        PanelMenuLinks.style.color = '#000'
      }
    }


    Мои рекомендации (кроме тех, что я описал выше):
    • Правильно использовать функции получения доступа к элементам HTML
    • ID обычно даётся единственному элементу в документе, в остальных случаях используется класс
    • Использовать innerText там где можно обойтись и без innerHTML
    • Создавать элементы средствами JS, а не встраиванием HTML кода через innerHTML
    • Пишите функции (пусть даже маленькие), если есть повторения в коде: так код будет и красивее и читабельнее и удобнее в использовании
    • Давать классам и id русские имена типа vhod -- не самая лучшая идея. Используйте переводчик, чтобы перевести интересующие Вас названия на английский.
    • Выберите способ именования переменных: либо block_panel_menu, либо blockPanelMenu. У Вас же встречаются оба варианта. В JavaScript принято использовать вариант, называемый Camel Case, то есть, второй вариант: blockPanelMenu.

    Ну а так по мелочи: можно использовать одинарные кавычки ' вместо двойных ";
    изучите стрелочные функции типа () => {} . Часто можно использовать именно их -- они и короче писать и не захламляют код лишними словами;
    Слушатели событий можно записать короткой записью, например: window.addEventListener('scroll', функция) можно написать window.onscroll = функция (в большинстве случаев просто добавляется 'on' в начало названия события); Желательно писать в начале скрипта строчку 'use strict' -- строгий режим -- гугл расскажет о нём лучше меня

    Задавайте вопросы, что не понятно, на всё отвечу!
    Ответ написан
    2 комментария