2011-03-15 75 views
1

嘿傢伙,我 寫了一個小的自定義動畫滾動功能...jquery/javascript:未捕獲TypeError?

function scroll(selector, animate, viewOffset) { 

    pageOffset = selector.offset(); 
    scrollPos = pageOffset.top - viewOffset; 

    if (animate) { 

     $('html, body').animate({scrollTop : scrollPos + 'px'}, { 
      duration: 'slow', // how fast we are animating 
      easing: 'easeOutQuint', // the type of easing 
      complete: function() { } 
     }); 

    } else { 
     $('html, body').scrollTop(scrollPos); 
    } 

} 

我把它與scroll($('#something'), false, 30);

它的實際工作,但有時它是一個有點馬車和功能不正常工作。我總是在點擊事件上調用scroll()函數。

我遇到的最大問題是頁面加載時,我的控制檯告訴我下面一行。

Uncaught TypeError: Cannot read property 'top' of null (script.js line 191 which is line 3 in my example above)

任何想法可能會導致此錯誤? scroll()函數甚至不在dom-ready或on-load上調用。它只是針對特定的點擊事件進行調用。

感謝你的幫助

回答

0

它不應該是:

pageOffset = $(selector).offset(); 

+0

這取決於參數是否已經是jQuery對象。就個人而言,我總是用$。()來包裝所有東西,所以它沒關係。 – Alnitak 2011-03-15 16:35:39

+0

參數名稱'selector'意味着它只是一個簡單的選擇器而不是一個jQuery對象 - 您可能是對的,但對我來說,它看起來不是jQuery對象,並且確實解釋了他正在獲取的錯誤。 – karim79 2011-03-15 16:38:49

+0

它仍然得到相同的錯誤,當你嘗試使用滾動()http://jsfiddle.net/ALYpY/ – themerlinproject 2011-03-15 16:39:43

0

我通常會遇到與選擇器錯誤類似的「神祕錯誤」。

用try/catch語句將所有代碼包裝到函數中,並嘗試調試它。幾乎所有主流瀏覽器都有調試工具。在catch語句中設置一個斷點,然後你的腳本在那裏查看pageOffset和選擇器變量。

P.S .: PhpStorm有史以來最好的JavaScript調試器。

0

您確定您的頁面上已經定義了#selector嗎?

相關問題