Размеры окна просмотра не соответствуют «видимой части экрана»

#javascript #html #reactjs #redux #viewport

#javascript #HTML #reactjs #сокращение #окно просмотра

Вопрос:

Я пытаюсь создать компонент всплывающей подсказки в react таким образом, чтобы, когда он находится близко к боковой части экрана, он выравнивался с дочерним элементом. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь получить размер окна (window.innerWidth и window.innerHeight) или положение компонента с помощью «getBoundingClientRect», они дают мне ширину / высоту и положение компонента относительно того, что выглядит как div вместо порта просмотра (см. прикрепленное изображение)Размер контейнераВнутренняя ширина и внутренняя высота печатаются в консолиФактическая высота / ширина видового экрана

«getBoundingClientRect» дает мне позицию относительно размера средней секции. Предполагается, что моя всплывающая подсказка будет отображаться при наведении курсора мыши на «Наведите курсор сюда, чтобы увидеть всплывающую подсказку». В настоящее время говорится, что как верхний, так и левый значения равны 8px. В консоли я выводю результаты innerHeight, innerWidth и getBoundingClientRect компонента.

Это код, который я использую для позиции

 useEffect(() => {
   const { innerWidth, innerHeight } = window;
   const {
     top,
     bottom,
     right,
     left,
     width
   } = reference.current.getBoundingClientRect();
   if (position !== 'left' amp;amp; position !== 'right') {
     if (left <= 45 amp;amp; dataLength > width) {
       setLeftOffset(calculateOffset(width, 'left'));
     }

     if (top <= 45) {
       setPosition('bottom');
     }

     if (right >= innerWidth - 45 amp;amp; dataLength > width) {
       setLeftOffset(-calculateOffset(width, 'right'));
     }

     if (bottom >= innerHeight - 45) {
       setPosition('top');
     }
   }

   // If left or right, need an extra 5px offset
   if (position === 'left') setLeftOffset(5);

   if (position === 'right') setLeftOffset(-5);
 }, [window]);
  

Я просто неправильно понимаю окно просмотра? Что я могу сделать, чтобы получить фактическое положение компонента относительно экрана и фактический размер видимого содержимого? Любая помощь была бы с благодарностью принята!