2017-12-10 9 views
0

要素が画面上にある(無限ローダーを実装しようとしている)ときを見つけようとしています。交差オブザーバAPIコールバック偶数要素が表示されない

残念ながら、リスト内の最後の項目をObserverにバインドして、残念ながらchrome 62 mac 10.10では、私が観察している要素がビューポートにない場合でもコールバックが発生します。

交差率を確認すると簡単に防止できます。これは交差点オブザーバーが機能する方法ですか?

ご協力いただきありがとうございます。

bindIO(); 
 

 

 
function ioCallback(entries, observer) { 
 
    console.log("entries"); 
 
    console.log(entries); 
 
    entries.forEach(entry => { 
 
     // Each entry describes an intersection change for one observed 
 
     // target element: 
 
     console.log(entry.boundingClientRect); 
 
     console.log(entry.intersectionRatio); 
 
     console.log(entry.intersectionRect); 
 
     console.log(entry.isIntersecting); 
 
     console.log(entry.rootBounds); 
 
     console.log(entry.target); 
 
     console.log(entry.time); 
 
    }); 
 
} 
 

 
function bindIO(arguments) { 
 
    var options = { 
 
     threshold: 1.0 
 
    } 
 

 
    observer = new IntersectionObserver(ioCallback, options); 
 
} 
 
var triggerel; 
 
var lastIndex; 
 
var items; 
 
var observer; 
 

 
setTimeout(function() { 
 
    observeEl(); 
 
}, 2000); 
 

 

 
function observeEl(arguments) { 
 
    items = document.querySelectorAll('.item'); 
 
    lastIndex = items.length 
 
    triggerel = items[lastIndex - 1]; 
 
    observer.observe(triggerel); 
 

 
}
<!DOCTYPE html> 
 
<html lang="en"> 
 
\t <head> 
 
\t \t <meta charset="utf-8"/> 
 
\t \t <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0"/> 
 
\t \t <title>HTML BolierPlate</title> 
 
\t  <link rel="stylesheet" type="text/css" href="css/reset.css"></link> 
 
\t  <link rel="stylesheet" type="text/css" href="css/mystyle.css"></link> 
 
\t \t <style> 
 
\t \t \t .item{ 
 

 
\t \t \t \t background: green; 
 
\t \t \t \t margin: 30px; 
 
\t \t \t \t height: 400px; 
 
\t \t \t \t width: 400px; 
 
\t \t \t \t color: black; 
 
\t \t \t \t font-weight: black; 
 
\t \t \t } 
 
\t \t \t 
 
\t \t </style> 
 

 
\t </head> 
 

 
\t <body> 
 
\t  
 
\t  Welcome to BoilerPlate!!! 
 
\t \t 
 

 

 
\t \t <div class="item-1 item"> 
 
\t \t \t 
 
\t \t \t Items #1 
 

 
\t \t </div> 
 

 
\t \t <div class="item-2 item"> 
 
\t \t \t 
 
\t \t \t Items #2 
 

 
\t \t </div> 
 

 
\t \t <div class="item-3 item"> 
 
\t \t \t 
 
\t \t \t Items #3 
 

 
\t \t </div> 
 

 
\t \t <div class="item-4 item"> 
 
\t \t \t 
 
\t \t \t Items #4 
 

 
\t \t </div> 
 

 
\t \t <div class="item-5 item"> 
 
\t \t \t 
 
\t \t \t Items #5 
 

 
\t \t </div> 
 

 
\t \t <div class="item-6 item"> 
 
\t \t \t 
 
\t \t \t Items #6 
 

 
\t \t </div> 
 

 
\t \t <div class="item-7 item"> 
 
\t \t \t 
 
\t \t \t Items #7 
 

 
\t \t </div> 
 

 
\t \t <div class="item-8 item"> 
 
\t \t \t 
 
\t \t \t Items #8 
 

 
\t \t </div> 
 

 
\t \t 
 

 
\t \t <script src="js/lib/jquery.min.js" ></script> 
 
\t  <script src="js/myscript.js" ></script> 
 
\t  
 
\t </body> 
 
</html>

答えて

2

確かにあなたは直感的と思われるものを触ってきました。

IntersectionObserverがインスタンス化されると、要素が表示されているかどうかの検出としてコールバックが1回実行されます(表示されていない場合は、isIntersecting属性はfalseとして正しくレポートされます)。

最も簡単な方法は、要素が実際に表示されているときに開始する機能を実行する前に、.isIntersectingをチェックすることです。

これは、あなたが間違いを犯していないことを確認しながら正しい道のりであることを確認するのに役立ちます。

+0

DOM内に既に存在する要素を観察し始めたとき、交差点オブザーバは最初にそれをテストし、交差しているかどうかをチェックします。答えをありがとう –

関連する問題