2012-01-27 23 views
9

क्रोम और सफारी में, $("body").scrollTop(1000) जहां अपेक्षा की जाती है।jQuery स्क्रॉलपॉप ब्राउज़र पर असंगत

आईई और एफएफ में, कुछ भी नहीं होता है।

आईई और एफएफ में, $(window).scrollTop(1000) काम करता है, लेकिन वे विभिन्न स्थानों पर जाते हैं। यह क्रोम और सफारी में भी काम करता है, लेकिन वे दोनों एक अलग जगह पर भी जाते हैं। ऐसा लगता है कि वे 300-500 पिक्सल तक बंद हैं।

क्या स्क्रॉलटॉप संपत्ति सेट करने के लिए कोई लगातार तरीका है जो क्रॉस ब्राउज़र का काम करता है, और यदि नहीं, तो jQuery क्यों नहीं है?

मैं इसे एनिमेट करना चाहता हूं, जो क्रोम और सफारी में ठीक काम करता है, लेकिन अन्य ब्राउज़रों में नहीं।

क्या ब्राउज़र पहचान करने का मेरा एकमात्र विकल्प है? (बुरा अभ्यास) या क्या कोई बेहतर तरीका है?

+0

क्या आपने $ (दस्तावेज़) .scrollTop ("...") का उपयोग करने का प्रयास किया है? – epignosisx

+0

वास्तव में काम किया। मैंने $ ('दस्तावेज़') की कोशिश की थी लेकिन ऐसा नहीं हुआ। यदि आप एक प्रश्न के रूप में जवाब देते हैं तो मैं आपको क्रेडिट दूंगा। –

उत्तर

11

$(jQuery.browser.webkit ? "body": "html").animate({ scrollTop: myTop }, myDur);

वेबकिट ब्राउज़रों (क्रोम/सफारी, दोनों मैक और विन) का उपयोग करें "शरीर", दूसरों का प्रयास करें (एफएफ/ओपेरा/आईई 7-9) "html"

का उपयोग

प्यार ब्राउज़र पहचान होना चाहिए।

+5

jQuery.browser संस्करण 1.3 के बाद से हटा दिया गया है और 1.9 से हटा दिया गया है –

0

ब्राउज़र पर निर्भर करते हुए आपको body या html पर scrollTop लागू करने की आवश्यकता है, लेकिन दोनों को लागू करने में कोई हानि नहीं है। चूंकि .scrollTop() सेट में पहले तत्व पर लागू होता है, लेकिन .animate() सभी तत्वों पर लागू होता है, तो आप ऐसा कर सकते हैं:

$('body, html').animate({ 
    scrollTop: 1000 
}, 'fast'); 

आप बदलाव तुरंत लागू करने के लिए, 0 को गति ('fast') बदलने चाहते हैं। वैकल्पिक रूप से, आप निम्न का उपयोग कर सकते हैं, लेकिन मुझे उपर्युक्त वाक्यविन्यास बेहतर पसंद है:

$('body, html').each(function() { $(this).scrollTop(1000); });