2013-11-28 33 views
1

我試圖讓jQuery的滾動只是部分的高度下降(這是響應),當用戶按下向下翻頁:jQuery的向下滾動的部分與頁面高度向下鍵

<section class="intro viewportheight_min" id="intro"> 
... 
</section> 
<section id="page2"> 
... 
</section> 
<section c id="page3"> 
... 
</section> 

CSS的全高部分:

body, html, .container, section { 
    height: 100%; 
    margin:0; 
} 

這裏是JS:

var ar=new Array(33,34,35,36,37,38,39,40); 
$(document).keydown(function(e) { 
    var key = e.which; 
//  PgUp(33), PgDn(34), End(35), Home(36), Left(37), Up(38), Right(39), Down(40) 
     if(key==33) { 
     $(document).scrollTop($(document).scrollTop() - $(window).height()); 
     } 
     if(key==34) { 
     $(document).scrollTop($(document).scrollTop() + $(window).height()); 
     } 

     return true; 
}); 

但是,這並不正常工作,它會在近t最後一部分的底部。

+0

所有部分的高度是否相同?如果不是我們如何知道哪一段高度可供選擇? –

+0

@ThanhTrung是的我加了css,對不起。 – Louis

+0

我也試過$('#intro')。outerHeight(true)同樣的問題 – Louis

回答

2

使用此邏輯適應您的代碼。即使不具有相同高度,也適用於所有元素

var positionMap = {}; 

$('section').each(function(){ 
    var $this = $(this); 
    positionMap.push({ height: $this.outerHeight(true), position: $this.offset() }); 
} 

$(document).keydown(function(e) { 
    var key = e.which; 

    //the current scroll position 
    var currentPos = $('body').scrollTop(); 

     if(key==33) { 
     //Find next section position 
     for (var i=0; i<positionMap.length; i++) 
     { 
      var e = positionMap[i]; 
      //found the pre 
      if (e.position.top > currentPos){ 
       destination = e.position.top; 
       break; 
      } 
     } 
     } 
     else if(key==34) { 
     //Find previous section position 
     for (var i=0; i<positionMap.length; i++) 
     { 
      var e = positionMap[i]; 
      //found the pre 
      if (e.position.top + e.height >= currentPos){ 
       destination = e.position.top; 
       break; 
      } 
     } 
     } 

     $('body').scrollTop(destination); 

     return true; 
}); 
+0

嗨感謝您的回答。但是我的代碼出現了一些錯誤 – Louis

1

未經測試,但你可以嘗試並適應類似:

$(document).keydown(function(e) { 
    var key = e.which; 

     //Find first visible section 
     $el = $('section').filter(':visible').first(); 

     if(key==33) { 
     //Find next section position 
     var offset = $el.next().offset(); 
     $(document).scrollTop(offset.top); 
     } 
     if(key==34) { 
     //Find previous section position 
     var offset = $el.prev().offset(); 
     $(document).scrollTop(offset.top); 
     } 

     return true; 
}); 

此外,我認爲33和34是在正確的鍵碼FR上下翻頁。

+0

爲什麼'可見'?開始時不是所有部分都可見嗎? –

+0

@sdespont謝謝,但這模仿Firefox的默認頁面下滾動,這意味着它的滾動只比wiewport少一點......所以它沒有完全到達下一部分。 – Louis

+0

@ThanhTrung開始時,第一部分,如果全屏(100%的視口)。 – Louis