Просто включите 40 пикселей при расчете смещения ...
$('html,body').animate({scrollTop: $("#"+id).offset().top - 40},'500');
Или, может быть, что-то вроде этого ...
$('html,body').animate({scrollTop: $("#"+id).offset().top - $("#nav").height() },'500');
И хотя ответ @ Правина неверен,добавляет туда .stop()
, чтобы множественные выстрелы не мешали друг другу.Здесь это все вместе ...
<script>
// assuming `#nav` identifies your navigation element...
function goToByScroll(id){
$('html,body').stop().animate({scrollTop: $("#"+id).offset().top - $("#nav").height() },'500');
}
</script>