2013-10-28 10 views
28

ऐसा लगता है कि body.scrollTop (और body.scrollLeft) ES5 सख्त मोड में बहिष्कृत हैं। इसके लिए क्या कारण है, यह देखते हुए कि यह अभी भी DOMElement एस पर इन गुणों का उपयोग करने के लिए ठीक लगता है?body.scrollTop क्यों बहिष्कृत है?

पृष्ठभूमि जानकारी:

मैं (निर्दिष्ट के रूप में या कमी,) एक समारोह है कि वृद्धि की कोशिश करता है एक element के सभी पूर्वजों की scrollTop मूल्यों, ये वास्तव में बदल जाता है में से एक तक का समय है। मैं सोच रहा हूं कि, सख्त मोड के साथ शिकायत रखने के लिए, मुझे विशेष रूप से body तत्व के खिलाफ जांच करनी चाहिए क्योंकि माता-पिता की श्रृंखला ऊपर की ओर बढ़ती है।

[जाहिर है, bodydocument.body को संदर्भित करता है]

+3

आपको क्या लगता है कि सख्त मोड का इस पर कोई असर पड़ता है? ईसीएमएस्क्रिप्ट विनिर्देश मेजबान ऑब्जेक्ट्स से असंबंधित है जो ब्राउज़र ब्राउज़र वातावरण में उपलब्ध कराता है (कई वातावरणों में से एक जिसमें जावास्क्रिप्ट का उपयोग किया जा सकता है), और सख्त मोड उन्हें बदल नहीं सकता है। –

+0

ओह मुझे यह नहीं पता था। मैं क्रोम एक्सटेंशन विकसित कर रहा हूं और मैंने कंसोल पर body.scrollTop को सख्त मोड को बहिष्कृत करने के बारे में चेतावनियों का एक गुच्छा प्राप्त करना शुरू कर दिया है (मैं 'सख्त उपयोग "निर्दिष्ट करता हूं;')। यह वर्तमान में केवल क्रोम कैनरी पर होता है लेकिन मुझे लगता है कि जल्द ही पर्याप्त क्रोम रिलीज पर भी होगा। –

+0

@ टी.जे.क्रॉडर क्या कोई तरीका है कि मैं 'कंसोल' पर चेतावनी संदेशों से बच सकता हूं (जो कि मैंने अपनी आखिरी टिप्पणी में उल्लेख किया है)? इसके अलावा, यदि ईसीएमएस्क्रिप्ट विनिर्देश इस से संबंधित नहीं है, तो ब्राउजर इसे पहले स्थान पर क्यों चेतावनी देता है? –

उत्तर

34

इससे Chrome की खुद गलत व्यवहार है कि अब मान्य नहीं है, और वे उस पर भरोसा कर बंद करने के लिए लेखकों चेतावनी रहे हैं।

scrolling viewport is represented by document.documentElement (<html>) in standards mode or <body> in quirks mode। (Quirks mode नेविगेटर 4 और एक्सप्लोरर 5 के दस्तावेज़ प्रतिपादन emulates)

क्रोम body.scrollTop का उपयोग करता दोनों मोड है, जो गलत है में व्यूपोर्ट के स्क्रॉल स्थिति का प्रतिनिधित्व करने के लिए। यह they want to fix this जैसा लगता है ताकि वे लेखकों को मानक व्यवहार के लिए स्क्रिप्ट के लिए प्रोत्साहित कर रहे हों।

मुझे नहीं लगता कि आपको अपना कोड बदलने की जरूरत है। मानक मोड में body.scrollTop का उपयोग करने में कुछ भी गलत नहीं है, जब तक आप समझते हैं कि यह केवल body की स्क्रॉल स्थिति का प्रतिनिधित्व करता है (आमतौर पर 0, जब तक कि आपने body स्क्रॉल बॉक्स नहीं दिया हो)।

आप कंसोल में document.body.scrollTop को क्रियान्वित करते हुए चेतावनी देख सकते हैं:

body.scrollTop कठोर मोड में मान्य नहीं है। यदि सख्त मोड में और body.scrollTop केवल क्विर्क मोड में हैं तो documentElement.scrollTop का उपयोग करें।

-5

scrollTop कितना तत्व स्क्रॉल किया है को दर्शाता है। इसका मतलब है कि शरीर में स्क्रॉल नहीं होना चाहिए क्योंकि यह कभी भी स्क्रॉल नहीं होता है, शरीर में सबसे ऊपर स्क्रॉलबार होता है, इसलिए इसकी सामग्री को स्क्रॉल किया जा सकता है लेकिन शरीर ही नहीं।
इस पृष्ठ पर अंतिम चित्र एक बहुत बताते हैं:
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop

+1

यदि आप कंसोल पर चेक करते हैं, तो 'document.body.srollTop' के पास मान है कि पृष्ठ को कितने पिक्सल शीर्ष पर स्क्रॉल किया गया है। –

+0

देखें: http://jsbin.com/ohUdani/1 ([स्रोत] (http://jsbin.com/ohUdani/1/edit)) –

+1

मेरी माफ़ी, मैं हमेशा समझता हूं कि शरीर को स्क्रॉल नहीं होना चाहिए। जाहिर है मैं गलत हूँ। –

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