Задать вопрос
@timofeus91
Junior Frontend Developer

Почему scrollIntoView выполняется сразу на двух элементах?

Всем доброго дня! Есть такая ситуация. На странице есть два компонента со скроллами ( высота больше разрешенной либо из-за высоты экрана ), но разными z-index. Один частично перекрывает другой. У того что на первом плане есть код по скроллу к элементу . Ref указан у определенного элемента в длинном списке.

const myRef = useRef<HTMLLIElement | null>(null);

  const executeScroll = () => {
    if (myRef) {
      myRef?.current?.scrollIntoView({ behavior: "smooth" });
    }
  };

  useEffect(() => {
    executeScroll();
// сначала элементов нет. После их загрузки и получения в компоненте мы повторно вызываем useEffect
  }, [itemsForRender]);

// если выполнено определенное условие , то будет ref. Только один элемент подходит под условие всегда 
<li
              ref={something1 ===something2 ? myRef : undefined}

/>


Проблема в том что когда происходит скролл в этом компоненте, то происходит скролл и у компонента , который сзади , хотя у него этого нет в функционале. Кто-нибудь сталкивался с таким поведением scrollIntoView или кто-то может подсказать более лучший способ для выполнения скролла к элементу?
  • Вопрос задан
  • 182 просмотра
Подписаться 1 Средний 2 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillbox
    JavaScript
    3 месяца
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
gtomilin
@gtomilin
JavaScript HTML CSS
Наткнулся на этот вопрос
Был похожий - scrollIntoView вызывал скролл родительского элемента, в котором было несколько виджетов тоже со скролами
Если нужно чтобы скролл отрабатывал только на дочернем элементе не вызывая скролла родительского то лучше задавать scrollTop и не использовать scrollIntoView
Может кому пригодится)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы