Задать вопрос
@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 или кто-то может подсказать более лучший способ для выполнения скролла к элементу?
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
gtomilin
@gtomilin
JavaScript HTML CSS
Наткнулся на этот вопрос
Был похожий - scrollIntoView вызывал скролл родительского элемента, в котором было несколько виджетов тоже со скролами
Если нужно чтобы скролл отрабатывал только на дочернем элементе не вызывая скролла родительского то лучше задавать scrollTop и не использовать scrollIntoView
Может кому пригодится)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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