में केवल एक InfoWindow खुला है, मुझे अपने Google मानचित्र पर केवल एक InfoWindow खोलने की आवश्यकता है। एक नया खोलने से पहले मुझे अन्य सभी इन्फोविंडोज़ बंद करने की ज़रूरत है।Google मानचित्र API v3
क्या कोई मुझे दिखा सकता है कि यह कैसे करें?
में केवल एक InfoWindow खुला है, मुझे अपने Google मानचित्र पर केवल एक InfoWindow खोलने की आवश्यकता है। एक नया खोलने से पहले मुझे अन्य सभी इन्फोविंडोज़ बंद करने की ज़रूरत है।Google मानचित्र API v3
क्या कोई मुझे दिखा सकता है कि यह कैसे करें?
आप सिर्फ एक InfoWindow
वस्तु बनाने यह के लिए एक संदर्भ रखने के लिए, और पुन: उपयोग करने की जरूरत है सभी मार्करों के लिए है। :
आप केवल एक जानकारी विंडो एक समय में प्रदर्शित करने के लिए (के रूप में गूगल मैप्स पर व्यवहार है), आप केवल एक जानकारी विंडो है, जो आप नक्शे घटनाओं पर अलग-अलग स्थानों या मार्कर को पुन: असाइन कर सकते हैं बनाने की जरूरत चाहते हैं (जैसे उपयोगकर्ता क्लिक)।
इसलिए, आप बस InfoWindow
वस्तु बस के बाद आप अपने मानचित्र आरंभ, और फिर इस रूप में अपने मार्कर की click
ईवेंट हैंडलर्स संभाल बनाना चाह सकते हैं। मान लीजिए कि आप एक मार्कर someMarker
कहा जाता है दो:
google.maps.event.addListener(someMarker, 'click', function() {
infowindow.setContent('Hello World');
infowindow.open(map, this);
});
फिर InfoWindow
चाहिए जब आप close()
विधि कॉल करने के बिना एक नया मार्कर पर क्लिक करें स्वचालित रूप से बंद कर दें।
मैं यह भी करता हूं लेकिन क्या यह सामान्य है कि जानकारीविंडो अगले मार्कर पर खुलने के लिए +1 सेकंड की तरह लेता है? कभी-कभी यह बिल्कुल नहीं खुलता है। मैं सटीक उसी कोड का उपयोग करता हूं – MJB
डैनियल, अच्छा विचार !! इससे पहले कि मैं मैन्युअल रूप से सिंक्रनाइज़ करने की कोशिश कर रहा था, लेकिन यह अजीब जावास्क्रिप्ट त्रुटियों को दिखाता है (जैसे "c is null" main.js में है, या कुछ ऐसा है (123 रेंज 43 में से))। – Victor
Google मानचित्र आपको केवल एक सूचना विंडो खोलने की अनुमति देता है। तो यदि आप एक नई विंडो खोलते हैं, तो दूसरा स्वचालित रूप से बंद हो जाता है।
जो सही नहीं है, मैं अपने मानचित्र पर जितना 20 इन्फॉन्डोज़ खोल सकता हूं। यह v3 btw है। – leo
ठीक है, सुधार करने के लिए धन्यवाद। मुझे नहीं पता था कि यह संस्करण 3 में बदल गया था। –
आप अपना पिछला InfoWindow वस्तु
का ट्रैक रखने और उस पर
पास विधि कॉल जब आप एक नया मार्कर
पर क्लिक करें घटना को संभालने के लिए की जरूरत है।
N.B यह करीब साझा जानकारी विंडो वस्तु पर कॉल करने के लिए एक अलग मार्कर के साथ खुला बुला स्वचालित रूप से मूल बंद हो जाएगा आवश्यक नहीं है। विवरण के लिए Daniel's answer देखें।
मुझे पता है कि यह एक पुराना जवाब है, और उस समय v3 एपीआई अस्पष्ट था ... लेकिन वास्तव में 'क्लोज़()' विधि को कॉल करने की आवश्यकता नहीं है, अगर कोई सिंगल 'इन्फोविंडो' ऑब्जेक्ट का उपयोग किया जाता है। यदि एक ही ऑब्जेक्ट पर 'ओपन()' विधि को फिर से बुलाया जाता है तो यह स्वचालित रूप से बंद हो जाएगा। –
@ daniel-vassallo नोट के लिए धन्यवाद :) मैंने तदनुसार आपका जवाब उभारा है, यह सबसे उपयोगी मुझे लगता है। – RedBlueThing
धन्यवाद @Cannonade :) –
अपने इन्फॉविंडो को दायरे से बाहर बनाएं ताकि आप इसे साझा कर सकें।
यहाँ एक सरल उदाहरण है:
var markers = [AnArrayOfMarkers];
var infowindow = new google.maps.InfoWindow();
for (var i = 0, marker; marker = markers[i]; i++) {
google.maps.event.addListener(marker, 'click', function(e) {
infowindow.setContent('Marker position: ' + this.getPosition());
infowindow.open(map, this);
});
}
धन्यवाद। "इस" का उपयोग करके मेरी अधिकांश समस्याओं का हल हो गया। मैं अभी भी समझ नहीं पा रहा हूं कि setContent के अंदर कस्टम सामग्री का उपयोग कैसे करें। जैसे मेरे मार्कर लूप में, मैं "i" वैरिएबल का उपयोग करके एक सामग्री एचटीएमएल वैरिएबल बना देता हूं और इसे डेटाबेस ऑब्जेक्ट से जोड़ता हूं। मैं उस सामग्री को एचटीएमएल वैरिएबल को श्रोता में कैसे पास कर सकता हूं? – Ryan
मेरे मामले में विंडो केवल तब खुलती है जब मैं infowindow.open (मानचित्र, यह) में "यह" का उपयोग करता हूं; "मार्कर" के बजाय। आपका समाधान साझा करने के लिए Thx। – ownking
मैं यह भी करता हूं लेकिन क्या यह सामान्य है कि जानकारीविंडो अगले मार्कर पर खुलने के लिए +1 सेकंड की तरह लेता है? कभी-कभी यह बिल्कुल नहीं खुलता है। मैं सटीक कोड का उपयोग करता हूं – MJB
मुझे एक ही समस्या थी लेकिन सबसे अच्छा जवाब इसे पूरी तरह से हल नहीं करता था, मुझे अपने बयान में क्या करना था, यह मेरे वर्तमान मार्कर से संबंधित था। शायद यह किसी की मदद करता है।
for(var i = 0; i < markers.length; i++){
name = markers[i].getAttribute("name");
address = markers[i].getAttribute("address");
point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
contentString = '<div style="font-family: Lucida Grande, Arial, sans-serif;>'+'<div><b>'+ name +'</b></div>'+'<div>'+ address +'</div>';
marker = new google.maps.Marker({
map: map,
position: point,
title: name+" "+address,
buborek: contentString
});
google.maps.event.addListener(marker, 'click', function(){
infowindow.setContent(this.buborek);
infowindow.open(map,this);
});
marker.setMap(map);
}
मूल रूप से आप एक समारोह है कि ऑनक्लिक ईवेंट प्रतिनिधि एक new InfoBox()
=> के संदर्भ में रहता है चाहता हूँ। अपने मार्कर (एक पाश में) बनाते समय का उपयोग bindInfoBox(xhr, map, marker);
// @param(project): xhr : data for infoBox template
// @param(map): object : google.maps.map
// @param(marker): object : google.maps.marker
bindInfoBox: (function() {
var options = $.extend({}, cfg.infoBoxOptions, { pixelOffset: new google.maps.Size(-450, -30) }),
infoBox = new window.InfoBox(options);
return function (project, map, marker) {
var tpl = renderTemplate(project, cfg.infoBoxTpl); // similar to Mustache, Handlebars
google.maps.event.addListener(marker, 'click', function() {
infoBox.setContent(tpl);
infoBox.open(map, marker);
});
};
}())
var infoBox
एसिंक्रोनस रूप से सौंपा और स्मृति में रखा है। हर बार जब आप bindInfoBox()
पर कॉल करते हैं तो बदले में फ़ंक्शन को कॉल किया जाएगा। infoBoxOptions
केवल एक बार पास करने के लिए आसान है!
मेरे उदाहरण में मुझे map
पर अतिरिक्त पैरामीटर जोड़ना पड़ा क्योंकि मेरी शुरुआत टैब घटनाओं में देरी हो रही है।
एक बालक देर है, लेकिन मैं केवल एक infowindow खुला माकन द्वारा एक वैश्विक चर infowindow है में कामयाब रहे।
var infowindow = new google.maps.InfoWindow({});
तो listner अंदर
infowindow.close();
infowindow = new google.maps.InfoWindow({
content: '<h1>'+arrondissement+'</h1>'+ gemeentesFiltered
});
infowindow.open(map, this);
मेरे लिए बहुत अच्छा काम करता है :) – lumos
एक globar var selectedInfoWindow;
घोषित और इसका इस्तेमाल खुली जानकारी विंडो धारण करने के लिए: इस तरह से
var infoWindow = new google.maps.InfoWindow({
content: content
});
// Open the infowindow on marker click
google.maps.event.addListener(marker, "click", function() {
//Check if there some info window selected and if is opened then close it
if (selectedInfoWindow != null && selectedInfoWindow.getMap() != null) {
selectedInfoWindow.close();
//If the clicked window is the selected window, deselect it and return
if (selectedInfoWindow == infoWindow) {
selectedInfoWindow = null;
return;
}
}
//If arrive here, that mean you should open the new info window
//because is different from the selected
selectedInfoWindow = infoWindow;
selectedInfoWindow.open(map, marker);
});
यह हल:
function window(content){
google.maps.event.addListener(marker,'click', (function(){
infowindow.close();
infowindow = new google.maps.InfoWindow({
content: content
});
infowindow.open(map, this);
}))
}
window(contentHtml);
यहां एक है समाधान जो केवल एक ही जानकारी बनाने की आवश्यकता नहीं है इसे पुन: उपयोग करने के लिए अनुमति दें। आप कई जानकारी बना सकते हैंविंडोज़, केवल एक चीज जो आपको चाहिए, एक CloseAllInfoWindows फ़ंक्शन बनाने के लिए है, और इसे एक नया इन्फॉंडो खोलने से पहले कॉल करें।
सभी infoWindows
var infoWindows = [];
स्टोर सरणी में प्रत्येक नए infoWindow, बस के बाद infoWindow = नए स्टोर करने के लिए एक वैश्विक सरणी बनाएँ: तो, अपने कोड रखने, तो आप सिर्फ करने की जरूरत है ...
infoWindows.push(infoWindow);
closeAllInfoWindows समारोह बनाएं
function closeAllInfoWindows() {
for (var i=0;i<infoWindows.length;i++) {
infoWindows[i].close();
}
}
अपने कोड में, infoWindow खोलने से पहले बंद करें AllInfoWindows() को कॉल करें।
सादर,
तुम क्या करने की कोशिश की थी? – IgniteCoders