2015-11-05 44 views
0

我有一個關於我的平滑滾動函數的問題,當我嘗試在HTML中使用參數調用它時,參數「不註冊」,我的參數變量獲取空值。Javascript:參數設置爲空即使給出了值

function yPosition() { 
    if (self.pageYOffset) return self.pageYOffset; 
    if (document.body.scrollTop) return document.body.scrollTop; 
    return 0; 
} 

function elementYPosition(eID) { 
    var element = document.getElementById(eID); 
    var y = element.offsetTop; 
    var node = element; 
    while (node.offsetParent && node.offsetParent != document.body) { 
     node = node.offsetParent; 
     y += node.offsetTop; 
    } return y; 
} 

function scroll(eID) { 
    var startY = yPosition(); 
    var stopY = elementYPosition (eID); 
    var distance = stopY > startY ? stopY - startY : startY - stopY; 
    if (distance < 100) { 
     scrollTo(0, stopY); 
     return; 
    } 
    var speed = Math.round(distance/100); 
    if (speed >= 20) speed = 20; 
    var step = Math.round(distance/25); 
    var leapY = stopY > startY ? startY + step : startY - step; 
    var timer = 0; 
    if (stopY > startY) { 
     for (var i = startY; i < stopY; i += step) { 
      setTimeout("window.scrollTo(0, "+leapY+")", timer * speed); 
      leapY -= step; 
      if (leapY > stopY) { 
       leapY = stopY; 
       timer++; 
      } 
     } 
     return; 
    } 
    for (var i = startY; i > stopY; i-= step) { 
     setTimeout("window.scrollTo(0, "+leapY+")", timer * speed); 
     leapY -= step; 
     if (leapY < stopY) { 
      leapY = stopY; 
      timer++; 
     } 
    } 
} 

相關的html:

<div id="scroll"> 
      <a href="#problemScroll" onclick="scroll('abc'); return false"><img src="graphics/down_arrow.png" alt="down arrow" /></a> 
</div> 

控制檯運行時:

Uncaught TypeError: Cannot read property 'offsetTop' of 
null elementYPosition js.js:12 

@ js.js:12scroll 
@ js.js:22onclick 
@ index.html:17 

回答

1

這行代碼:

var element = document.getElementById(eID); 

顯然返回null這樣,當你再試着這樣做:

var y = element.offsetTop; 

您正在嘗試讀取.offsetTop財產上null它拋出一個異常。

,可以發生主要有兩個原因:

  1. 如果是ID爲您的文檔中沒有元素相匹配的是在eID參數

  2. 如果您之前調用它部分頁面已完成加載,因此具有該ID的元素尚不存在。


看來,你是直接從您的HTML與此呼籲scroll()

onclick="scroll('abc'); return false" 

因此,它必須是從文檔中缺少'abc' ID值。


僅供參考,您可以驗證這是通過將console.log()到你的代碼是這樣的情況:

function elementYPosition(eID) { 
    var element = document.getElementById(eID); 

    // insert this to check the element variable 
    console.log(element); 

    var y = element.offsetTop; 
    var node = element; 
    while (node.offsetParent && node.offsetParent != document.body) { 
     node = node.offsetParent; 
     y += node.offsetTop; 
    } return y; 
} 

想必這種情況的解決方法是,以確保該元素與'abc'您的文檔中存在ID值。

+0

我有一個以abc作爲名字的錨,這個名字來自原來的跳轉滾動,我完全忽略了它當然必須是ID的事實。該功能現在沒有錯誤,但不能按預期工作。我將發佈一篇描述發生問題的新帖子,因爲它與此完全不同。謝謝。 – haakl

1

這可能是因爲沒有與id 「ABC」 沒有元素:這將是nullelement的原因。確保你有一個(你提供的代碼中沒有一個)。

除此之外,代碼應該是有效的。

+0

我有一個以abc作爲名字的錨點,這個名字來自原來的跳轉滾動,我完全忽略了它當然必須是ID的事實。該功能現在沒有錯誤,但不能按預期工作。我將發佈一篇描述發生問題的新帖子,因爲它與此完全不同。謝謝。 – haakl

相關問題