2015-05-04 56 views
6

我有一個UL導航,我這有平滑滾動jQuery的工作:平滑滾動以錨定偏移像素,除了一個特定的錨?

$(document).ready(function() { 
$(document).on("scroll", onScroll); 

//smoothscroll 
$('a[href^="#"]').on('click', function (e) { 
    e.preventDefault(); 
    $(document).off("scroll"); 

    $('a').each(function() { 
     $('.nav').removeClass('active'); 
    }) 
    $('.nav').addClass('active'); 

    var target = this.hash, 
     menu = target; 
    $target = $(target); 
    $('html, body').stop().animate({ 
     'scrollTop': $target.offset().top-59 
    }, 500, 'swing', function() { 
     window.location.hash = target; 
     $(document).on("scroll", onScroll); 
    }); 
}); 
}); 

它關係到-59像素,這正是我需要它爲所有,但一個錨定的事,有什麼辦法我可以添加一行代碼,說'除了X類'或什麼的? jQuery的新手在這裏;)

任何幫助將是偉大的,謝謝。

回答

1

在您的點擊事件中,您可以訪問您點擊的nav元素(此處)和您滾動到的目標($ target)。你可以看看其中的任何一個,以確定你需要抵消除-59之外的一些金額。

如果你有很少的情況下,你需要有一個不同的偏移,你可以這樣做:

var offset = -59; 
if ($(this).attr(href)=="#something") offset=-100; //or whatever special offset you need 

而改變這一行:

'scrollTop': $target.offset().top-59 

這樣:

'scrollTop': $target.offset().top+offset 

如果你想要一個更靈活È溶液和具有訪問HTML,可以把一個數據屬性在任一<一個>或目標元素,如

<a href="#something" data-scroll-offset=-100></a> 

然後,類似於第一種方法:

var offset=-59; 
if ($(this).attr("data-scroll-offset")!==null) offset=$(this).attr("data-scroll-offset"); 

如果它是目標元素上,這將是$的目標,而不是$(本)


如果你想完全排除一定的錨,你可以從錨選擇將其刪除。取而代之的是

$('a[href^="#"]') 

排除只喜歡某一錨這樣:

$('a[href^="#"]:not([href="#somethingBad"])') 

或排除任何美女主播與某一類,像這樣:

$('a[href^="#"]:not(.excludeMe)') 
+0

哇,多數民衆贊成真棒@andy非常感謝! –