2012-06-20 6 views
1

페이지 상단에 고정 메뉴 막대가 있고 모든 메뉴 링크가 같은 페이지의 앵커 링크입니다. 간단히 말해서, 메뉴 항목으로 앵커 링크가있는 섹션으로 나뉘어 진 한 페이지 웹 사이트입니다.JQuery 오프셋 #NaN 문제

메뉴 항목을 클릭 할 때 아래의 javascript를 사용하여 섹션을 부드럽게 만듭니다.

$(document).ready(function() { 
    $("a.anchorLink").anchorAnimate() 
}); 

jQuery.fn.anchorAnimate = function(settings) { 

    settings = jQuery.extend({ 
     speed : 1100 
    }, settings); 

    return this.each(function(){ 
     var caller = this 
     $(caller).click(function (event) { 
      event.preventDefault() 
      var locationHref = window.location.href 
      var elementClick = $(caller).attr("href") 

      var destination = $(elementClick).offset().top-60; 
      $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, settings.speed, function() { 
       window.location.hash = elementClick-60 
      }); 
      return false; 
     }) 
    }) 
} 

톱 메뉴 높이가 60 픽셀이므로 offset()에서 뺍니다. 위로 슬라이드가 올바르게 작동하는지 확인합니다. 또한 위치 해시를 빼야 할 때도 있습니다. FF와 IE에서는 잘리는 슬라이드가 있으며, 한 번 클릭하면 슬라이드가 완료됩니다.

그것은 잘 작동하지만 문제는 여기에 전체 코드입니다 http://www.site.com/#NaN 대신

http://www.site.com/#linkname의 같은 URL이 표시 될 때 - http://jsfiddle.net/85saK/1/가. 안타깝게도 실제 링크 ID 대신 #NaN으로 끝나는 클릭 후 URL을 표시하지 않습니다 (예 : #store, #home 또는 #contact).

+0

당신이 무엇을'$ (발신자) .attr ("HREF") 봤어'을 주는가? 반환하는 문자열을 직접 숫자로 강요 할 수 없으므로 60을 빼면 (모르는 이유가 무엇이든) NaN을 얻습니다. - 숫자가 아님 –

+0

@YiJiang 제거한 후 코드를 실행하십시오. 파이어 폭스에서 elementClick의 "-60". 내가 왜 다른 옵션이 없는지 너는 이해할거야. –

+0

여기 무슨 일이 일어나고 있는지 알지? 코드가 "작동 중"인 이유는 그것이 파손 되었기 때문입니다. [브라우저의 기록을 조작하는 방법] (https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history)에 대해 읽어 보거나, 요소의 크기가 위쪽으로 확장되도록 스타일을 편집하십시오. –

답변

1

시도 :

var destination = $(elementClick).offset().top -60; 
$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, settings.speed, function() { 
    //window.location.hash = elementClick 
    elementClick 
}); 
+0

좋아요. 비록 그것이 원하는 방식으로 문제를 해결하지는 못하지만 URL에서 #NaN을 제거하고 기능을 손상시키지 않으면 많은 도움이됩니다. 감사! –