簡體   English   中英

為什么document.body.scrollHeight返回不同的數字?

[英]Why is document.body.scrollHeight returning different number?

我試圖獲取身體的總高度,所以我使用let page = document.body.scrollHeight 控制台告訴我,此滾動鏡頭中身體的高度為4728.120px 話雖如此,我正在將page記錄到控制台。 最初我得到4728px 然后刷新頁面后,我得到2029px 我不明白為什么這個數字會發生變化,尤其是考慮到窗口的大小尚未調整。

  let backgrounds = [
    "background_1.jpg",
    "background_2.jpg",
    "background_3.jpg",
    "background_4.jpg",
    "background_5.jpg",
    "background_6.jpg",
    "background_7.jpg",
    "background_8.jpg",
    "background_9.jpg",
    "background_10.jpg",
    "background_11.jpg",
    "background_12.jpg",
    "background_13.jpg",
    "background_14.jpg",
    "background_15.jpg",
    "background_16.jpg",
    "background_17.jpg",
    "background_18.jpg"
  ],
  i = 0;

  var page       = document.querySelector('body').scrollHeight,
      base       = backgrounds.length,
      height     = page / base,
      increment  = height;
  console.log(page);
  let points = Array(base).fill().map((_, i) => height+=increment)
  window.addEventListener('scroll', () => {
    let scroll = document.documentElement.scrollTop;
    console.log(i,points[i]);
    if (scroll >= points[i]) {
      document.body.style.backgroundImage = `url(${backgrounds[i]})`;
      i++;
    }
  });

我從您的代碼中了解到,您想在用戶向下滾動時更改背景(請注意,您的代碼在向上滾動時不會變回背景)。

基於這個假設,我做了一個工作演示。 只需運行代碼片段並滾動右下角的框即可。

 const backgrounds = [ 'https://images.pexels.com/photos/1020315/pexels-photo-1020315.jpeg', 'https://images.pexels.com/photos/255379/pexels-photo-255379.jpeg', 'https://images.pexels.com/photos/207171/pexels-photo-207171.jpeg', ]; const mainDiv = document.getElementById('main'); const pageHeight = mainDiv.scrollHeight; const backgroundHeight = Math.round(pageHeight / backgrounds.length); const changePoints = backgrounds.map((value, index) => { const nextPoint = backgroundHeight * index; return nextPoint; }); changePoints.push(pageHeight); console.log(pageHeight, backgroundHeight, changePoints); let currentBackgroundIndex = 0; window.addEventListener('scroll', () => { const scroll = document.body.scrollTop || window.pageYOffset; const nextChangePoint = changePoints[currentBackgroundIndex]; console.log(scroll, nextChangePoint); if (scroll > nextChangePoint) { const currentBackground = backgrounds[currentBackgroundIndex]; currentBackgroundIndex++; mainDiv.style.backgroundImage = `url(${currentBackground})`; console.log('Changing background', currentBackgroundIndex, currentBackground); } }); 
 html, body { padding: 0; margin: 0; } #main { height: 2000px; padding: 0; margin: 0; } 
 <html> <body> <div id="main"></div> </body> </html> 

現在,關於您的問題,為什么scrollHeight會發生變化。 我無法使用您給定的代碼復制行為。 我最好的猜測是,您可能正在X時刻檢查它,並且主體可能仍在解析和加載元素。 例如,假設您加載了兩個圖像,每個圖像分別為50px和您的身體為100px。 如果您在沒有圖像的情況下測量scrollHeight,則會得到100; 如果加載一幅圖像后為150像素,而最末尾為200像素。

一些避免這種情況的技術:

  1. 為所有元素增加高度。
  2. 延遲執行該代碼,或在幾秒鍾后重新計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM