EDITED (टू स्टैंडआउट): इस सवाल के सौ अन्य जवाबों में से मुझ पर भरोसा करें, यह एकमात्र सही है जो यह भी बताता है कि यह क्या हो रहा है
ठीक है, तो मुझे पता है कि यह धागा पुराना है, और एक हजार उत्तर हैं, लेकिन उनमें से कोई भी सही नहीं है और मुझे सही उत्तर पोस्ट करने की आवश्यकता महसूस होती है।
सबसे पहले, आपको अपनी जानकारी प्राप्त करने के लिए कभी भी निर्दिष्ट करने या किसी भी चीज़ पर जाने की आवश्यकता नहीं है। स्क्रॉलबार के बिना प्रदर्शित करने के लिए, हालांकि कभी-कभी आप गलती से ऐसा करने से काम कर सकते हैं (लेकिन यह अंततः विफल हो जाएगा)।width's
height's
दूसरा, Google मैप्स एपीआई में स्क्रॉलिंग बग infoWindow's
नहीं है, यह कैसे काम करता है, इसके बारे में सही जानकारी प्राप्त करना बहुत मुश्किल है। खैर, यहाँ यह है:
जब आप Google मैप्स एपीआई को इस तरह से खोलने की जानकारी देते हैं:
var infoWindow = new google.maps.InfoWindow({...});
....
infoWindow.setContent('<h1>Hello!</h1><p>And welcome to my infoWindow!</p>');
infoWindow.open(map);
सभी इरादों और उद्देश्यों के लिए, Google नक्शे अस्थायी रूप div
से आपके पृष्ठ के अंत में स्थित होते हैं ( वास्तव में यह एक बनाता है detached DOM tree
- लेकिन यह समझने के लिए वैचारिक रूप से आसान है कि अगर मैं कहता हूं कि आप div
अपने पृष्ठ के अंत में होने वाले स्थानों की कल्पना करते हैं ) तो एचटीएमएल सामग्री के साथ। निर्दिष्ट। यह उस div को मापता है (जिसका अर्थ है कि, इस उदाहरण में, मेरे दस्तावेज़ में जो भी CSS नियम लागू होते हैं h1
और p
उसे पाने के लिए और उस पर टैग लागू होंगे) width
और height
। Google फिर div
उसको मापता है , उसको माप देता है जो उसे तब मिलता है जब उसे आपके पृष्ठ पर जोड़ा गया था, और इसे आपके द्वारा निर्दिष्ट स्थान पर मानचित्र पर रखता है।
यहाँ समस्या बहुत से लोगों के लिए होती है - उनके पास ऐसा दिखने वाला HTML हो सकता है:
<body>
<div id="map-canvas"></div>
</body>
और, किसी भी कारण से, सीएसएस जो इस तरह दिखता है:
h1 { font-size: 18px; }
#map-canvas h1 { font-size: 32px; }
क्या आप समस्या देख सकते हैं? जब एपीआई आपके लिए माप लेने की कोशिश करता है infoWindow
(तुरंत इसे प्रदर्शित करने से पहले), h1
सामग्री के हिस्से का आकार होगा 18px
(क्योंकि अस्थायी "मापने वाला div" शरीर से जुड़ा हुआ है), लेकिन जब एपीआई वास्तव में जगह infoWindow
पर होता है मानचित्र, #map-canvas h1
चयनकर्ता पूर्वता लेगा , जिससे फ़ॉन्ट आकार उस समय की तुलना में बहुत भिन्न होगा जब एपीआई ने आकार को मापा था infoWindow
और इस परिस्थिति में आपको हमेशा स्क्रॉलबार मिलेगा।
आपके द्वारा स्क्रॉलबार होने के विशिष्ट कारण के लिए कुछ और अलग-अलग बारीकियां हो सकती हैं infoWindow
, लेकिन इसके पीछे का कारण यह है:
समान सीएसएस नियम आपके अंदर की सामग्री पर लागू होने चाहिए, infoWindow
भले ही वास्तविक HTML तत्व मार्कअप में दिखाई देता हो। यदि वे नहीं करते हैं, तो आपको अपने जानकारी में स्क्रॉलबार प्राप्त करने की गारंटी दी जाएगी
तो जो मैं हमेशा करता हूं, वह कुछ इस तरह है:
infoWindow.setContent('<div class="info-window-content">...your content here...</div>');
और मेरे सीएसएस में:
.info-window-content { ... }
.info-window-content h1 { .... }
.info-window-content p { ... }
etc...
तो कोई फर्क नहीं पड़ता कि एपीआई कहां मापता है div
- बंद होने से पहले body
या उसके अंदर #map-canvas
, इस पर लागू सीएसएस नियम हमेशा एक जैसे रहेंगे।
संपादित करें: फ़ॉन्ट परिवार
लगता है कि Google फॉन्ट लोडिंग मुद्दे पर सक्रिय रूप से काम कर रहा है (नीचे वर्णित है) और कार्यक्षमता बहुत हाल ही में बदल गई है इसलिए जब आप infoWindow
पहली बार खुल रहे हैं, तो आपके द्वारा उपयोग किए जा रहे एपीआई के संस्करण के आधार पर रोबोटो फ़ॉन्ट लोड नहीं देखा जा सकता है या नहीं । एक खुली बग रिपोर्ट है (भले ही चैंज में यह बग रिपोर्ट पहले से ही तय हो गई थी) जो बताती है कि इस समस्या से Google को अभी भी कठिनाई हो रही है।
एक और बात: अपने परिवार के सदस्यों को देखो !!!
एपीआई के नवीनतम अवतार में, Google ने चतुर होने की कोशिश की और यह जानकारी लपेटी है जिसमें कुछ ऐसी सामग्री है जिसे सीएसएस चयनकर्ता के साथ लक्षित किया जा सकता है - .gm-style-iw
। उन लोगों के लिए जो ऊपर बताए गए नियमों को नहीं समझते थे, यह वास्तव में मदद नहीं करता था, और कुछ मामलों में इसे और भी बदतर बना दिया। स्क्रॉलबार्स लगभग हमेशा दिखाई देंगे पहली बार एक infoWindow
खोला गया था, लेकिन अगर आपने infoWindow
फिर से खोला , तो ठीक उसी सामग्री के साथ भी स्क्रॉलबार चले जाएंगे। गंभीरता से, यदि आप इससे पहले भ्रमित नहीं थे, तो इससे आपका दिमाग खराब हो जाएगा। यहाँ क्या हो रहा था:
यदि आप API लोड होने पर पृष्ठ पर Google लोड होने वाली शैलियों को देखते हैं, तो आप इसे देख पाएंगे:
.gm-style {
font-family: Roboto,Arial,sans-serif
...
}
ठीक है, इसलिए Google इसे मैप्स Roboto
-परिवार का उपयोग करके हमेशा नक्शे को थोड़ा अधिक सुसंगत बनाना चाहता था । समस्या यह है कि अधिकांश लोगों के लिए, इससे पहले कि आप एक को खोलते infoWindow
, ब्राउज़र ने अभी तक Roboto
फ़ॉन्ट डाउनलोड नहीं किया था (क्योंकि आपके पृष्ठ पर और कुछ भी इसका उपयोग नहीं करता है, इसलिए ब्राउज़र यह जानने के लिए पर्याप्त स्मार्ट है कि इसे डाउनलोड करने की आवश्यकता नहीं है यह फ़ॉन्ट)। इस फ़ॉन्ट को डाउनलोड करना तात्कालिक नहीं है, भले ही यह बहुत तेज़ हो। पहली बार जब आप खोलते हैं infoWindow
और एपीआई div
आपकी infoWindow
सामग्री के साथ शरीर को मापता है, तो यह माप लेना शुरू करता है, यह Roboto
फ़ॉन्ट डाउनलोड करना शुरू कर देता है , लेकिन आपकी infoWindow's
माप ली जाती है और विंडो को Roboto
डाउनलोड करने से पहले मानचित्र पर रखा जाता है । परिणाम, अक्सर, एक थाinfoWindow
जिसकी माप तब ली गई थी जब वह सामग्री का उपयोग कर Arial
या एक sans-serif
फ़ॉन्ट के साथ प्रदान की गई थी , लेकिन जब इसे मानचित्र पर प्रदर्शित किया गया था (और Roboto
डाउनलोड करना समाप्त कर दिया था) तो यह सामग्री एक ऐसे फ़ॉन्ट में प्रदर्शित की जा रही थी जो एक अलग आकार था - और वॉइला - स्क्रॉलबार्स पहली बार दिखाई देते हैं तुम खोलो infoWindow
। ठीक infoWindow
दूसरी बार खोलें - जिस बिंदु पर Roboto
डाउनलोड किया गया है और इसका उपयोग तब किया जाएगा जब एपीआई इसे infoWindow
सामग्री का माप ले रहा है और आपको कोई स्क्रॉलबार दिखाई नहीं देगा।