Ответы пользователя по тегу JavaScript
  • Как создать функцию, если её название лежит в переменной?

    @MEDIOFF
    Python Developer
    Только присваивать ее какому нибудь глобальному объекту, типо window:

    var funcName = "sum";
    
    window[funcName] = function () {
     console.log(1 + 2);
    };
    
    window.sum();


    Поправочка, можно еще через globalThis, но поддержка не у всех браузеров (Edge не поддерживает):
    var a = "sum";
    
    globalThis[a] = function () {
      console.log(1 + 3);
    };
    
    sum();


    еще поправочка, через window тоже можно писать sum():
    var a = "sum";
    
    window[a] = function () {
      console.log(1 + 4);
    };
    
    sum();
    Ответ написан
  • Как можно отсортировать элементы по дата-атрибуту?

    @MEDIOFF
    Python Developer
    Отсортировать можете вот так:
    const nodes = document.querySelectorAll('.tab-content')
    let sortedNodes = Array.from(nodes).sort((el1, el2) => el1.dataset.tab_content - el2.dataset.tab_content)


    И у вас будет массив остартированных элементов.
    Вставить можете вот так:
    const container = document.querySelector('.container')
    sortedNodes.forEach((el) => {
        container.insertAdjacentElement('beforeend', el)
    })
    Ответ написан
  • Как при доскроливании к элементу добавлять класс блоку?

    @MEDIOFF
    Python Developer
    Как я понимаю класс animated
    function scrollReveal() {
          var revealPoint = 150;
          var revealElement = document.querySelectorAll(".scrollReveal");
          for (var i = 0; i < revealElement.length; i++) {
            var windowHeight = window.innerHeight;
            var revealTop = revealElement[i].getBoundingClientRect().top;
            if (revealTop < windowHeight - revealPoint) {
              revealElement[i].classList.add("animated");
            }
          }
        }
    
        window.addEventListener("scroll", scrollReveal);
        scrollReveal();


    просто убирите блок else,
    можно еще удалять eventListener, потому что как я понимю нужда в нем отпадает:

    spoiler
    function scrollReveal() {
          var revealPoint = 150;
          var revealElement = document.querySelectorAll(".scrollReveal");
          for (var i = 0; i < revealElement.length; i++) {
            var windowHeight = window.innerHeight;
            var revealTop = revealElement[i].getBoundingClientRect().top;
            if (revealTop < windowHeight - revealPoint) {
              revealElement[i].classList.add("animated");
              window.removeEventListener('scroll', scrollReveal)
            }
          }
        }
    
        window.addEventListener("scroll", scrollReveal);
        scrollReveal();
    Ответ написан
    Комментировать
  • Как поменять функции местами в js?

    @MEDIOFF
    Python Developer
    Ну скорее всего их изначальное значение вы задаете через css, так что там просто их изначально показываете, а по клику скрываете, желательно полный код прикреплять, css и htlm.
    Ответ написан
    Комментировать
  • Как исправить мой скрипт чтобы при заходе на сайт слайдер слева работал, а левый нет?

    @MEDIOFF
    Python Developer
    Я чуть переписал твой js, но теперь как ты хотела так и работает
    let interval = null
    
    class Slider {
        constructor(elemID, onLoad) {
            this.elem = document.querySelector(`#${elemID}`);
            this.slidesMain = this.elem.querySelectorAll('.slide');
            this.currentSlide = 0
            this.onLoad = onLoad
    
            this.changeSlideOnHover()
            
            if (onLoad) {
              this.changeSlideOnLoad()
            }
        }
    
        nextSlide() {
            this.slidesMain[this.currentSlide].classList.remove("showing");
            this.currentSlide = (this.currentSlide + 1) % this.slidesMain.length;
            this.slidesMain[this.currentSlide].classList.add("showing");
        }
    
        changeSlideOnHover() {
            this.elem.addEventListener("mouseenter", () => {
                clearTimeout(interval)
                this.nextSlide()
                interval = setInterval(() => {
                    this.nextSlide()
                }, 6000);
            });
            this.elem.addEventListener("mouseleave", () => {
                clearTimeout(interval)
            });
        }
        
        changeSlideOnLoad() {
            this.nextSlide()
            interval = setInterval(() => {
                this.nextSlide()
            }, 6000);
        }
    }
    
    const slider1 = new Slider('slidesLeft', true);
    const slider2 = new Slider('slidesRight', false);


    И в css измени .presentation-title на такой:
    .presentation-title {
        position: relative;
        padding-bottom: 124px;
        font-size: 75px;
        color: #ffffff;
        z-index: 2;
        font-weight: 800;
        pointer-events: none;
    }
    Ответ написан
    1 комментарий