Intersection Observer не работает с диалоговым окном jQuery UI - PullRequest
1 голос
/ 07 мая 2019

Это относится к Наблюдатель пересечения не работает с целью с положением: фиксировано

но моя проблема в том, что наблюдатель взаимодействия не запускает элемент с позицией: абсолютный. У меня есть диалоговое окно jQuery UI, и когда оно появляется, наблюдатель не запускается.

Вот мой код:

var self = $('<div/>').appendTo('body').dialog({
    autoOpen: false
})
var first = true;
function visibility_checker(x) {
    if (first) {
        first = false; // ignore initial call
    } else {
        console.log(x);
    }
}
setTimeout(function() {
    self.dialog('open');
}, 4000);
if (window.IntersectionObserver) {
    var visibility_observer = new IntersectionObserver(visibility_checker, {
        root: document.body
    });
    visibility_observer.observe(self[0]);
}
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css" rel="stylesheet"/>

Без jQuery UI

var self = $('<div class="x"/>').hide().appendTo('body');
var first = true;
function visibility_checker(x) {
    if (first) {
        first = false; // ignore initial call
    } else {
        console.log(x);
    }
}
setTimeout(function() {
    self.show();
}, 4000);
if (window.IntersectionObserver) {
    var visibility_observer = new IntersectionObserver(visibility_checker, {
        root: document.body
    });
    visibility_observer.observe(self[0]);
}
.x {
 width: 100px;
 height: 100px;
 background: red;
}
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css" rel="stylesheet"/>

Кто-нибудь знает, в чем проблема и почему она не срабатывает?

1 Ответ

1 голос
/ 07 мая 2019

Обнаружена проблема: проблема в позиции: абсолютная, не знаю почему, но установка:

body {
    position: relative;
}

исправила проблему, возможно, абсолютная необходимость в ссылке.Также согласно MDN вы можете использовать null в качестве root.Это также работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...