2013-05-13 5 views
6

मैं जब उपयोगकर्ता के साथ एक "#"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; 
     }); 
    }); 
}); 

मैं 40px के बारे में जोड़ने की जरूरत है कि अपनी href शुरू होता है एक लिंक पर क्लिक करता आंदोलन चिकनी के लिए निम्न कोड का उपयोग कर रहा करने के लिए अतिरिक्त पिक्सल जोड़ा जा रहा है scrollTop मान पर, इसलिए स्टॉपिंग पॉइंट डू स्नॉट सामग्री को कवर करता है। मैं इस के लिए कोड को संशोधित किया है, लेकिन यह कर रही करने के लिए यह (नोटिस +40 कोड के अंत में) नहीं लगता है:

$(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

(-40) करना होगा जोड़ कर आप सही जगह में '+ 40' गयी। यह क्या हो रहा है –

+0

मैंने अभी 40 बार जोड़ा, कृपया एक नज़र डालें। इससे कोई फर्क नहीं पड़ता कि मैं क्या मूल्य जोड़ता हूं, यह उसी स्थान पर रुक जाता है। – farjam

+0

क्या आपने सत्यापित किया है कि '$ target.offset()। शीर्ष' अपेक्षित मान देता है? –

उत्तर

2

+40 ऑफसेट जो आप वास्तव में चाहते हैं एक -40 क्योंकि काम नहीं कर रहा हो करने के लिए एक बार एनीमेशन पूरा ब्राउज़र कर रहा है यह id आप window.location.hash

करने से गुजर रहे हैं आपको लगता है कि लाइन हटाने या तत्वों के लिए स्क्रॉल किया जा रहा करने के लिए निम्न सीएसएस जोड़ने या तो कर सकते हैं के साथ तत्व के लिए जा रहा के डिफ़ॉल्ट प्रतिक्रिया है।

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

देखें FIDDLE

+0

धन्यवाद, आपके सुझाव का पालन किया और मेरे लक्ष्य को "लक्षित" की कक्षा जोड़ने के लिए मेरे जेएस tweaked; हालांकि, भले ही मैं अपने "। लक्षित" div के लिए सीएसएस को समायोजित कर सकूं, फिर भी अगर लोग ऊपर और नीचे स्क्रॉल करना शुरू कर देते हैं तो पेज ठीक दिखाई नहीं देगा, क्योंकि वे मेरे सीएसएस द्वारा जोड़े गए अंतर को देखेंगे। मुझे आशा है कि मैं समझ में आ रहा हूं। – farjam

+0

'window.location.hash = target;' आपके कोड में किसी अन्य फ़ंक्शन के लिए महत्वपूर्ण है? –

+0

नहीं, यह नहीं है। इसे हटाया जा सकता है। – farjam

13

मैं एक देर से जवाब पता, लेकिन किसी एक समाधान की मांग इस कोशिश कर सकते हैं।

.top + चाल

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

यह एक बेहतर तरीका है, सीएसएस वर्ग स्विचिंग के साथ गड़बड़ नहीं है। –

संबंधित मुद्दे