2013-07-04 96 views
0

我創建了一個帶有固定標題的站點。我發現這會導致一個問題在頁面中集成基於Java的頁面滾動控件

  • 當有人點擊該頁面向下/向上鍵,渦管的長度過長

,由於它不remving頭的高度(和在它下面填充一點點)從滾動長度。所以(舉個例子),如果你在頁面的開頭,點擊「page down」,你必須手動回滾一下,以匹配你以前離開的地方,而不會錯過任何內容。

我發現了我認爲在這個基於Java的頁面

滾動控制,要解決這個問題:

它的工作在演示頁面中已經足夠了。然而,無論我做什麼(這給了我這種初學者的技能水平),我都無法控制我的頁面。我有另一個人看看它並提供建議,但他們都沒有解決這個問題。他做的一件事是調整「bar」內容與原始的Javascript代碼。我在下面粘貼了這個修改後的代碼,與上面的原始鏈接進行比較。

我的網頁實際內容尚未託管。一位朋友主持了一個我用通用內容製作的「虛擬」頁面,但是與我的其他一些頁面相同的代碼(我還沒有準備好公開內容)。這裏的鏈接:

我完全同意這個難住了。根據需要閱讀檔案,我發現了一些很好的建議,所以我希望有人能夠理解這一點。另外,我希望它能幫助其他人想要在他們自己的固定標題站點中糾正這一點。

在此先感謝...


(function(){ 
    var content, header 
    function adjustScroll(event) { 
     var e, key, remainingSpace; 


     content = content || document.getElementById('content'); 
     header = header || document.getElementById('header'); 


     e = event || window.event; 
     key = e.which || e.keyCode; 


     if (key === 33) { // Page up 
      remainingSpace = content.scrollHeight - content.scrollTop; 
      setTimeout(function() { 
       content.scrollTop = (remainingSpace >= content.scrollHeight - 

header.offsetHeight) ? 0 : (content.scrollTop + header.offsetHeight); 
      }, 10); 
     } 
     if (key === 34) { // Page down 
      remainingSpace = content.scrollHeight - content.scrollTop - 

content.offsetHeight; 
      setTimeout(function() { 
       content.scrollTop = (remainingSpace <= header.offsetHeight) ? 

content.scrollHeight : (content.scrollTop - header.offsetHeight); 
      }, 10); 
     } 
    } 


    document.onkeydown = adjustScroll; 
}()); 
+0

java不是順便說一句。 – Killrawr

+1

java是爲了javascript,因爲汽車是爲了地毯... – Dahaka

+0

謝謝Killraw和Dahaka。我沒有意識到! :) 任何想法(S)如何讓這個工作在我的網頁? –

回答

0

你需要做的是添加一個類標籤(讓我們將其命名爲類=「新」),以每個項目的名單上,處理按鍵事件滾動到下一個項目或前一個,這個代碼可以幫助你:

function scrollToNew() { 
    scrollTop = $(window).scrollTop(); 
    $('.new').each(function(i, h2){ // loop through article headings 
    h2top = $(h2).offset().top; // get article heading top 
    if (scrollTop < h2top) { // compare if document is below heading 
     $.scrollTo(h2, 800); // scroll to in .8 of a second 
     return false; // exit function 
    } 
    }); 
} 

jQuery(function() { 

    $("#next").click(scrollToNew); 

    $(document).keydown(function (evt) { 
    if (evt.keyCode == 40) { // down arrow 
     evt.preventDefault(); // prevents the usual scrolling behaviour 
     scrollToNew(); // scroll to the next new heading instead 
    } else if (evt.keyCode == 38) { // up arrow 
     evt.preventDefault(); 
     scrollToLast(); 
    } 
    } 

}); 

更多細節:https://stackoverflow.com/a/2168876/2310699

+0

Akram,謝謝。稍後讓我把這個包裹起來,讓你知道它是如何工作的... –

+0

我有一點時間來看看這個現在...我正確理解這個 - 這使得頁面滾動到一個特定的點一個頁面,而不是通過減少滾動量來補償滾動頁眉的高度?如果可能的話,我很大的後者... –

0

在你的樣品頁頁眉的classheader不是id,所以這是行不通的:

document.getElementById('header')

這正好爲content了。更改這些2行:

<div class="container"> 
    <div class="header"> 

<div id="container"> 
    <div id="header"> 

爲什麼你在它添加一個分號到該行的末尾:

var content, header 

如果是這種情況並非如此,然後創建你自己的jsfiddle來顯示你的確切代碼。

+0

Balint, 我試着用ID代替兩個div標籤中的類,並且弄亂了我的頁面。它停止了容器和標題的編碼,沒有提供任何容器/標題(主文本+標題圖像/按鈕被推到綠色「填充」/背景通常會出現的左邊緣)。 當我嘗試添加一個分號到你注意到的java,它沒有效果 - 我想代碼需要修復之前,這將有所幫助。 我在IE中使用文本陰影腳本。如果我創建了一個jsfiddle,我應該把它的代碼放在java框中以及頁面滾動java代碼中嗎? –

+0

巴林特, 我已經創建了兩個jsfiddles證明: http://jsfiddle.net/MMM717/VZfcV/1/ http://jsfiddle.net/MMM717/w96Hu/ 第一個是我的「虛擬」頁面,沒有頁面滾動javascript。第二個jsfiddle是頁面滾動代碼,在它被修改了一點之後,使用「header」代替「bar」代碼。 這有幫助嗎? –