2010-04-07 10 views
97

मैं jquery का उपयोग करके एक साइट लिख रहा हूं जो बार-बार $(window).width() और $(window).height() पर आधारित स्थिति और आकार तत्वों पर आधारित है व्यूपोर्ट आकार।

समस्या निवारण में मुझे पता चला कि व्यूपोर्ट का आकार बदलने पर उपरोक्त jquery कार्यों में बार-बार कॉल में मुझे थोड़ा अलग व्यूपोर्ट आकार रिपोर्ट मिल रही है।

आश्चर्य है कि कोई विशेष मामला है या नहीं, जब ऐसा होता है, तो यह होता है, या यदि यह वही तरीका है। रिपोर्ट किए गए आकारों में अंतर 20px या उससे कम है, ऐसा प्रतीत होता है। यह सफारी 4.0.4, फ़ायरफ़ॉक्स 3.6.2 और मैक ओएस एक्स 10.6.2 पर क्रोम 5.0.342.7 बीटा में होता है। मैंने अभी तक अन्य ब्राउज़रों का परीक्षण नहीं किया क्योंकि यह ब्राउज़र के लिए विशिष्ट नहीं प्रतीत होता है। मैं यह समझने में भी असमर्थ था कि अंतर क्या निर्भर करता है, यदि यह व्यूपोर्ट आकार नहीं है, तो क्या कोई अन्य कारक हो सकता है जिससे परिणाम अलग हो जाएं?

किसी भी अंतर्दृष्टि की सराहना की जाएगी।


अद्यतन:

यह $(window).width() और $(window).height() के मूल्यों है कि बदल रहे हैं नहीं है। यह उन चर के मान हैं जिनका उपयोग मैं उपरोक्त मानों को संग्रहीत करने के लिए कर रहा हूं।

यह स्क्रॉलबार नहीं है जो मानों को दोष दे रहे हैं, परिवर्तनीय मान बदलते समय कोई स्क्रॉलबार दिखाई नहीं देता है। मेरे चर में मूल्यों को संग्रहीत करने के लिए मेरा कोड यहां दिया गया है (जो मैं बस कर रहा हूं इसलिए वे कम हैं)।

(यह सब $(document).ready() के भीतर है)

// शुरू में चर घोषित भीतर .ready()

var windowWidth = $(window).width(); //retrieve current window width 
var windowHeight = $(window).height(); //retrieve current window height 
var documentWidth = $(document).width(); //retrieve current document width 
var documentHeight = $(document).height(); //retrieve current document height 
var vScrollPosition = $(document).scrollTop(); //retrieve the document scroll ToP position 
var hScrollPosition = $(document).scrollLeft(); //retrieve the document scroll Left position 


function onm_window_parameters(){ //called on viewer reload, screen resize or scroll 

    windowWidth = $(window).width(); //retrieve current window width 
    windowHeight = $(window).height(); //retrieve current window height 
    documentWidth = $(document).width(); //retrieve current document width 
    documentHeight = $(document).height(); //retrieve current document height 
    vScrollPosition = $(document).scrollTop(); //retrieve the document scroll ToP position 
    hScrollPosition = $(document).scrollLeft(); //retrieve the document scroll Left position 

}; //end function onm_window_parameters() 

मैं मूल्यों के खिलाफ ऊपर चर जांच करने के लिए एक चेतावनी बयान डाला कार्यों otehr को दिखाई है कि वे होल्डिंग माना जाता है। $(item).param() मान लगातार बने रहते हैं, लेकिन मेरे चर उन कारणों से बदलते हैं जिन्हें मैं समझ नहीं सकता हूं।

मैंने उन स्थानों की तलाश की है जहां मेरा कोड प्रश्न में चर के मूल्य को बदल सकता है, क्योंकि उनके सेट मानों को पुनः प्राप्त करने के विपरीत और कोई भी नहीं ढूंढ सकता है। अगर यह संभावना है तो मैं पूरे शेबांग को कहीं भी पोस्ट कर सकता हूं।

उत्तर

92

मुझे लगता है कि आप जो देख रहे हैं वह स्क्रॉलबार की छिपाने और दिखाना है। Here's a quick demo showing the width change

एक तरफ के रूप में: क्या आपको लगातार मतदान करने की आवश्यकता है? आप आकार बदलने के लिए अपने कोड को अनुकूलित करने में सक्षम हो सकते हैं, जैसे:

$(window).resize(function() { 
    //update stuff 
}); 
+1

बीटीडब्ल्यू, आप ठीक बाद में थे ... जबकि समस्या निवारण मैंने देखा कि वहां स्क्रॉलबार थे। वे इतने संक्षेप में दिखाई दिए कि उन्हें मिड-निष्पादन में रुकने वाली स्क्रिप्ट के साथ डीबग मोड को छोड़कर देखा नहीं जा सका। एक बार जब मैंने उपरोक्त चर और फ़ंक्शन को हटा दिया, तो कुछ तत्व अभी भी स्थिति से कूद गए - इसे स्क्रिप्ट चरणों के क्रम में करना पड़ा - मुझे बस यह सुनिश्चित करना पड़ा कि मैंने अपनी डाली गई छवियों को सीएसएस को बाएं रखने के लिए रीसेट किया है: 0 छवि डालने से पहले । कहानी के लिए नैतिक: सिर्फ इसलिए कि स्क्रॉलबार लंबे समय तक दिखाई नहीं दे रहे हैं, इसका मतलब यह नहीं है कि वे वहां नहीं थे! –

+0

मैं इस प्रश्न का भी उपयोग करता हूं: http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-is-completed ताकि आप आकार बदलने के बाद जांच सकें घटना कुछ भी करने से पहले समाप्त हो गया है। आपकी स्क्रिप्ट आपके द्वारा आकार देने वाले प्रत्येक पिक्सेल को .resize() फ़ंक्शन में जो भी चलती है, उतनी ही बेहतर अभ्यास का इंतजार करना है। – MarkP

1

मुझे एक जैसी ही समस्या थी। जब मैं अपने पृष्ठ को रीफ्रेश करता था तो मुझे असंगत ऊंचाई() मान मिल रहा था। (यह समस्या का कारण बनने वाला मेरा चर नहीं था, यह वास्तविक ऊंचाई मान था।)

मैंने देखा कि मेरे पृष्ठ के प्रमुख में मैंने अपनी स्क्रिप्ट को पहले बुलाया, फिर मेरी सीएसएस फ़ाइल। मैंने स्विच किया ताकि सीएसएस फ़ाइल पहले से जुड़ी हो, फिर स्क्रिप्ट फाइलें और ऐसा लगता है कि अब तक समस्या ठीक हो गई है।

उम्मीद है कि मदद करता है।

+0

दरअसल, मेरी मूल समस्या यह थी कि जिस तरह से मेरे तत्व पृष्ठ के चारों ओर खुद को पोजिशन कर रहे थे, स्क्रॉलबार को दूसरे के एक अंश के लिए प्रकट होने के कारण - आटा को मापने के लिए पर्याप्त नहीं था, लेकिन इसे पकड़ने के लिए पर्याप्त नहीं था ... I एक बार जब मैंने अलग-अलग राज्यों में कोड तोड़ने के लिए अपने जावास्क्रिप्ट कथन के बीच चेतावनी बयान दिया तो इसे समझ लिया। मैंने ऐसा किया ताकि मैं अलर्ट कोड निष्पादन में प्रत्येक चरण में माप की रिपोर्ट कर सकूं। यही कारण है कि मैंने देखा कि राज्यों में से एक ने स्क्रॉलबार को प्रकट किया - जो राज्य होने के लिए हुआ था माप माप लिया गया था। –

+1

मैं स्क्रॉल बार के साथ एक ही चीज़ की पुष्टि कर सकता हूं। मैं ब्राउजर का आकार बदलने के बाद $ (विंडो) .height() का एक पठन करूंगा और यह 500 की तरह कुछ दिखा सकता है। फिर मैं रीफ्रेश करूँगा (ब्राउजर का आकार बदलने के बिना) और यह 700 की तरह कुछ बड़ा दिखाएगा। मेरे मामला, मैं इसे ओवरफ्लो करके ठीक करने में सक्षम था: शरीर पर छिपा हुआ, क्योंकि मैं कभी भी स्क्रॉलबार चालू नहीं करना चाहता था। एक बार मैंने ऐसा किया, ऊंचाई रिपोर्ट लगातार थी। – Susan

9

कोशिश एक

  • $(window).load घटना

या

  • $(document).ready

    उपयोग करने के लिए है, क्योंकि प्रारंभिक मान क्योंकि परिवर्तन है कि पार्स के दौरान होने की अस्थिर हो सकता है या के दौरान डोम लोड

3

ध्यान दें कि यदि समस्या, प्रदर्शित होने स्क्रॉलबार की वजह से किया जा रहा है अपने सीएसएस में

body { 
    overflow: hidden; 
} 

डाल एक आसान से ठीक कर सकते हैं (यदि आप स्क्रॉल करने के लिए पेज की जरूरत नहीं है)।

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