IntersectionObserver API errati c в Safari - PullRequest
       7

IntersectionObserver API errati c в Safari

0 голосов
/ 27 февраля 2020

У меня есть API IntersectionObserver, который проверяет видимость блоков для изменения классов заголовка и элементов меню, он отлично работает в Chrome, но в Safari очень ошибочно c (v. 13.0.5). Я также вставил polyfill, но не помогает. Это код, который я использую

/* Intersection observer */
let sections = document.querySelectorAll(".homesection");

let options = {
    root: null,
    rootMargin: '100px 0px 0px 0px',
    threshold: 0.7
};

let observer = new IntersectionObserver(function(entries,observer){
    entries.forEach(entry => {
        let thisID = entry.target.getAttribute('id');
        $('nav .top-menu li a.selected').removeClass("selected");
        $('body.loaded nav .top-menu li a[href=#'+thisID+']').addClass("selected");

        if ( $("body").hasClass("loaded") ) {
            if ( thisID == "home" || thisID == "top" ) {
                $('body').removeClass("scrolled");
                $("body").addClass("topscroll");
            } else {
                $('body').addClass("scrolled");
                $("body").removeClass("topscroll");
            }           
        }


    });
}, options);

sections.forEach(section => {
    observer.observe(section);
});

Эта проблема наиболее заметна при первой загрузке страницы, она не запускает сценарий и очень ошибочна c при наблюдении за элементами, но при втором загрузить или нажать на какое-нибудь внутреннее действие js, оно работает более-менее хорошо. Есть идеи, в чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Найден обходной путь для переноса начальной настройки загрузки (добавление классов, инициализация хеш-имени и т. Д. c.) В setTimeout с задержкой в ​​несколько сотен миллисекунд, похоже, теперь работает хорошо и с Safari.

0 голосов
/ 27 февраля 2020

Проблема может быть связана с режимом причуд браузера , как описано в относительной проблеме GitHub .

В Safari происходит следующее: в режиме quirks document.body.clientHeight возвращает высоту области просмотра. В режиме no quirks он возвращает высоту элемента.

Если проблема заключается в режиме quirk, вы можете исправить его , добавив тип документа в начале вашего сообщения HTML:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset=UTF-8>
    <title>Hello World!</title>
  </head>
  <body>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...