2013-05-13 17 views
6
Ben kullanıcı bir "#"

jQuery: scrollTop

$(document).ready(function(){ 
    $('a[href^="#"]').on('click',function (e) { 
     e.preventDefault(); 
     var target = this.hash, 
     $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top 
     }, 900, 'swing', function() { 
      window.location.hash = target; 
     }); 
    }); 
}); 

Ben 40px hakkında eklemeleri gerekir onun href başlar ki linke tıkladığında hareketini yumuşatmak için aşağıdaki kodu kullanıyorum

ek piksel ekleme scrollTop değerine kadar, durma noktası doe, içeriği kapsayamaz. Bunun için kod değiştirilmiş, ancak durumun (40 kodun sonuna doğru fark) yapıyor gibi görünmüyor:

$(document).ready(function(){ 
    $('a[href^="#"]').on('click',function (e) { 
     e.preventDefault(); 
     var target = this.hash, 
     $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top + 40 
     }, 900, 'swing', function() { 
      window.location.hash = target; 
     }); 
    }); 
}); 
+0

ekleyerek

Doğru yerde '+ 40'a eklendi. Bu ne oluyor? –

+0

Sadece 40'ı geri ekledim, lütfen bir göz atın. Hangi değeri eklediğim önemli değil, aynı yerde duruyor. – farjam

+0

$ target.offset(). Top 'un beklenen değeri döndürdüğünü doğruladınız mı? –

cevap

2

Size gerçekten istediğiniz ofset +40 bir -40 çünkü çalışmıyor olmak animasyon tarayıcı yapıyor yapılması tamamlandıktan sonra id sen sen bunu kaldırmak veya kaydırılmak istenen elemanlarına aşağıdaki css ekleyebilir ya window.location.hash

geçirerek ile elemana gitmeyi varsayılan tepki.

padding-top: 40px; 
margin-top: -40px; 

ben geç cevabını biliyorum ama bir çözüm arayışında birisi bu deneyebilirsiniz

+0

Teşekkürler, önerinizi takip ettiniz ve js'imi hedefime "hedeflenmiş" bir sınıf eklemek için değiştirdiler; Bununla birlikte, ".targeted" div'ım için css'yi ayarlayabilirsem bile, kullanıcılar dikey olarak yukarı ve aşağı kaydırmaya başlarsa, sayfa tam olarak görünmeyecektir, çünkü bunlar css'im tarafından eklenen boşluğu göreceklerdir. Umarım mantıklı olurum. – farjam

+0

'window.location.hash = target;' kodunuzdaki diğer bazı işlevler için kritik öneme sahip mi? –

+0

Hayır, öyle değil. Bu kaldırılabilir. – farjam

13

FIDDLE bakınız. .top + (-40) yapacak trick

$('html, body').stop().animate({ 
    'scrollTop': $target.offset().top + (-40) 
}, 900, 'swing', function() { 
    window.location.hash = target; 
}); 
+0

Bu daha iyi bir çözüm yolu, css sınıfları arasında geçiş yapmamanın bir yolu. –

İlgili konular