Привет, я предполагаю, что вы знакомы с javascript и использовали scrollIntoView в своей работе. Если нет, прочтите эту статью для лучшего понимания.

Этот пост предназначен для вас, если вы столкнулись с проблемой, используя метод element.scrollIntoView () для выделения элемента в представлении экрана.

Проблемы, с которыми вы могли столкнуться, заключаются в следующем:

Иногда поведение scrollIntoView является неожиданным (сама страница перемещается вместо перемещения элемента)

Плохая кросс-браузерная совместимость

Я столкнулся с той же проблемой и попытался решить ее после большого количества исследований в Интернете. Это чисто ванильный javascript, и не нужно беспокоиться о совместимости.

// This is the main function where which pass two ref parameters of Parent element & Child element
export const scrollIntoView = (parent, child) => {
  
  const parentBounding = parent.getBoundingClientRect(),
    clientBounding = child.getBoundingClientRect();
  
  const parentBottom = parentBounding.bottom,
    parentTop = parentBounding.top,
    clientBottom = clientBounding.bottom,
    clientTop = clientBounding.top;
  
  if (parentTop >= clientTop) {
    scrollTo(parent, -(parentTop - clientTop), 300);
  } else if (clientBottom > parentBottom) {
    scrollTo(parent, clientBottom - parentBottom, 300);
  }
  
};
function scrollTo(element, to, duration) {
  
  let start = element.scrollTop,
    currentTime = 0,
    increment = 20;
  
  let animateScroll = function() {
    currentTime += increment;
    
    let val = easeInOutQuad(currentTime, start, to, duration);
    element.scrollTop = val;
    
    if (currentTime < duration) {
      setTimeout(animateScroll, increment);
    }
  };
  
  animateScroll();
}
// Function for smooth scroll animation with the time duration
function easeInOutQuad(time, startPos, endPos, duration) {
  time /= duration / 2;
  
  if (time < 1) return (endPos / 2) * time * time + startPos;
time--;
  return (-endPos / 2) * (time * (time - 2) - 1) + startPos;
}

Надеюсь, код чистый и понятный. Если вам сложно понять или вы обнаружили проблему, прокомментируйте ее. Скоро ссылку с работающей моделью.