2012-09-10 34 views
0

我想滾動到div,每次用戶按下j鍵。這是它的代碼。使用jquery從一個整數中減去

$(function() { 
    function scroll(direction) { 

     var scroll, i, 
       positions = [], 
       here = $(window).scrollTop(), 
       collection = $('.message_box'); 

     collection.each(function() { 
      positions.push(parseInt($(this).offset()['top'],0)); 
     }); 

     for(i = 0; i < positions.length; i++) { 
      if (direction == 'next' && positions[i] > here) { scroll = collection.get(i); break; } 
      if (direction == 'prev' && i > 0 && positions[i] >= here) { scroll = collection.get(i); break; } 
     } 

     if (scroll) { 
     $('html, body').animate({"scrollTop": $(scroll).offset().top-50}); 
      $(scroll).css('color', 'blue'); 
      $(scroll).mouseleave(function() { 
      $(this).css('color', 'black'); 
      }); 
     } 

     return false; 
    } 

    $("#next,#prev").click(function() {   
     return scroll($(this).attr('id'));   
    }); 
$('body').keyup(function(event) { 
    if (event.which == 74) { 
    return scroll('next'); 
    } 
}); 
$('body').keyup(function(event) { 
    if (event.which == 75) { 
    return scroll('prev'); 
    } 
}); 

}); 

我需要從div的後感減去50滾動到這是這是。

$('html, body').animate({"scrollTop": $(scroll).offset().top-50}); 

它會滾動第一次,但不是其他時間。我總是得到整數這是第一個div要滾動的偏移量。 DEMO - http://jsfiddle.net/XP5sP/6/ 有人可以幫助我嗎?

+0

你能比「它不工作」更具體嗎?到底發生了什麼事情,這不是你想要的或期望的事情,以及你希望/期望的是什麼? –

+0

另外,任何[jsFiddle](http://jsfiddle.net)的機會都可以證明問題? –

+0

@AnthonyGrist http://jsfiddle.net/XP5sP/3/ – Subin

回答

1

的問題是,你總是以前第一個匹配元素移動scrollTop價值爲50個像素,所以它總是標識元素作爲您需要在if聲明中滾動到的元素,因爲它的位置大於當前的scrollTop值。

修改代碼的相關部分,以這樣的:

if (direction == 'next' && positions[i] > here + 50) { 
    scroll = collection.get(i); 
    break; 
} 

它佔的窗口方式被滾動到50個像素當前元素之上。

+0

非常感謝。 – Subin

+0

@Subin根本沒有問題。 –

1

$(scroll).offset().top-50是完全有效的,因爲.top將返回一個整數值。因此,這個問題不在你的代碼的這一部分。

我懷疑問題是在scroll函數中有scroll變量。在同一範圍內時,我總是避免將我的變量命名爲與我的函數名相同的名稱。

1

嘗試在你的減號之間加上一些空格,以免它被誤認爲破折號。

$('html, body').animate({"scrollTop": $(scroll).offset().top - 50}); 

或保存你的數學變量第一

var scrollMinusFifty = $(scroll).offset().top - 50; 
$('html, body').animate({"scrollTop":scrollMinusFifty});