2012-09-10 4 views
0

사용자가 j 키를 누를 때마다 div로 스크롤하고 싶습니다. 여기에 대한 코드가 있습니다.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의 offest에서 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

문제에서 수학을 저장 당신은 항상 첫 번째 일치하는 요소 전에 50 픽셀로 scrollTop 값을 이동하고 있다는, 그래서 항상 있음을 확인하는 것 요소가 현재 scrollTop 값보다 큰 이기 때문에 if 문에서 스크롤해야하는 것으로 선택하십시오.

이에 코드의 관련 부분을 수정 :이 창을 차지

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});