IntersectionObserver是Chrome 51+已經支持的API,用來檢測目標元素是否處於root容器之中。
以前咱們在作懶加載的時候,一般都是監聽瀏覽器scroll事件,而後根據元素位置是否處於可視窗口來作的,這種方式有個弊端就是,頁面在監聽scroll滾動的時候會致使頁面加載不流暢。
使用IntersectionObserverAPI就能夠避免這種狀況,達到平滑加載的目的,而且能夠根據threshold來定義回掉函數在何時觸發,更加的簡單準確。javascript
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .container{ width: 1100px; margin: 0 auto; } .test_model{ height: 300px; width: 300px; margin-top: 1200px; background-color: red; margin-bottom: 600px; } </style> </head> <body> <div class="container"> <div class="test_model" id="model"></div> </div> <script type="text/javascript"> window.onload = function(){ var obs = new IntersectionObserver((changes)=>{ changes.forEach(change => console.log(change.intersectionRatio.toFixed(2))) },{ threshold: [0, 0.25, 0.5, 0.75, 1] }); obs.observe(document.getElementById('model')); }; </script> </body> </html>
IntersectionObserver有observe,unobserve,disconnect等三個方法,分別指綁定觀察對象、中止觀測、關閉觀察器。
IntersectionObserver(callbakc,opts)接受兩個參數,第一個參數爲回調函數,在檢測目標根據opts裏面的threshold內容來觸發。css