Google Maps InfoBubble pixelOffset (Déplacement de la position par défaut au-dessus du marqueur)
Je suis en train de mettre en œuvre une coutume infoBubble qu'a l'ouverture du boîtier sur le côté d'un marqueur plutôt que la position par défaut de la sur le dessus. Cela s'est avéré être plus difficile que prévu.
L'aide de la normale infoWindow vous pouvez utiliser pixelOffset. Voir ici pour la la documentation
À l'aide de infoBubble cela ne semble pas être le cas. Est-il de toute façon de l'utilisation de pixelOffset dans un infoBubble, ou quelque chose qui va faire la même chose?
J'ai trouvé cela très difficile de rechercher, à l'aide d'une recherche google comme ceci renvoie aucun résultat pertinent Recherche Google
Ci-dessous toutes mes ressources, j'ai été à l'aide.
Et maintenant mon javascript ici juste au cas où le jsfiddle lien est rompu.
<script type="text/javascript">
$(document).ready(function () {
init();
});
function init() {
//Setup the map
var googleMapOptions = {
center: new google.maps.LatLng(53.5167, -1.1333),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
//Start the map
var map = new google.maps.Map(document.getElementById("map_canvas"),
googleMapOptions);
var marker = new google.maps.Marker({
position: new google.maps.LatLng(53.5267, -1.1333),
title: "Just a test"
});
marker.setMap(map);
infoBubble = new InfoBubble({
map: map,
content: '<div class="phoneytext">Some label</div>',
//position: new google.maps.LatLng(-35, 151),
shadowStyle: 1,
padding: '10px',
//backgroundColor: 'rgb(57,57,57)',
borderRadius: 5,
minWidth: 200,
arrowSize: 10,
borderWidth: 1,
borderColor: '#2c2c2c',
disableAutoPan: true,
hideCloseButton: false,
arrowPosition: 7,
backgroundClassName: 'phoney',
pixelOffset: new google.maps.Size(130, 120),
arrowStyle: 2
});
infoBubble.open(map, marker);
}
</script>
Mise à jour
Pour aider à répondre à cette question, j'ai mis en place un scénario de test . Les lignes importantes sont les lignes 38 & 39, qui doit spécifier où la position de l'étiquette.
Mise à jour 2
Pour le bounty sera décerné j'ai besoin de voir un exemple de la infoBubble positionné à l'écart de sa position par défaut au-dessus du marqueur. De préférence à la droite du marqueur.
Mise à jour 3
J'ai supprimé les cas de test à partir de la mise à jour 1, car il est hébergé sur mon ancienne entreprise serveurs.
source d'informationauteur Undefined
Vous devez vous connecter pour publier un commentaire.
Il semble que la infoBubble bibliothèque par défaut de positionnement de la bulle au-dessus du marqueur il est lié. Jetez un oeil à l'exemple de fichier-elles incluses dans la bibliothèque: http://code.google.com/p/google-maps-utility-library-v3/source/browse/trunk/infobubble/examples/example.html . Remarque, à partir de la ligne 99, à la ligne 122 et de l'utilisation de deux infobubbles. Le premier est lié à la marque, cependant que le second est un stand-alone et ainsi, si vous voyez la ligne 106, vous pouvez définir une position. Maintenant, à partir de cette compréhension que j'ai créé pour vous un exemple de ce violon http://jsfiddle.net/pDFc3/. Le infoBubble est positionné à la droite du marqueur.
C'est étrange, parce que le infoBubble bibliothèque js a une fonction pour setPosition ( http://code.google.com/p/google-maps-utility-library-v3/source/browse/trunk/infobubble/src/infobubble.js?r=206 ) voir en Ligne 1027. Mais pour une raison quelconque après que j'ai d'attente pour les DOM afin de charger et d'essayer de changer la position en allant
infoBubble.setPosition(newLatLng);
je ne fonctionne pas. Au contraire, déclarantinfoBubble.getPosition();
après le DOM me donne la position actuelle du marqueur, l'infoBubble est lié. Donc setPosition() peut avoir un bug dans la bibliothèque js, parce que je crois qu'il est encore en cours d'élaboration (je peux me tromper peut-être que c'est juste buggy).J'ai fixé mon jsFiddle pour résoudre votre problème lorsque le zoom avant et arrière, et le positionnement de la infoBubble en conséquence ( http://jsfiddle.net/pDFc3/ ). Permettez-moi d'expliquer la logique du premier. Tout d'abord, le niveau de zoom maximum sur Google Maps pour la feuille de route est de type 21 - cette valeur est incompatible pour l'imagerie par satellite, mais le zoom au maximum, l'utilisateur peut aller à l'est de 21 ans. À partir de 21, chaque fois que vous effectuez un zoom avant les différences entre les deux points peuvent être cohérente "sur l'écran" basé sur la logique suivante:
Dans notre cas, la valeur raisonnable à distance initiale a été 0.00003 degrés (entre marqueur et infoBubble). Ainsi, selon cette logique, j'ai ajouté le texte suivant pour trouver l'initiale de la distance longitudinale entre le marqueur et infoBubble:
De même, pour assurer la distance reste constante sur chaque niveau de zoom le changement, nous avons simplement déclarer une nouvelle longitude comme on écoute un changement dans le niveau de zoom:
Garder à l'esprit que vous pouvez faire ce code beaucoup plus efficace en déclarant des variables pour le marqueur.getPosition et d'autres valeurs qui sont appelés par le biais de méthodes. De sorte que les appels de méthode ne sont pas répétées et lente votre code vers le bas.
C'est ma solution.
Dans
InfoBubble
bibliothèqueremplacer
ensemble
InfoBubble.prototype.draw
méthodeavec
et puis vous pouvez l'utiliser en
Puis, enfin, nous devons utiliser cette méthode
setBubbleOffset(x,y);
pour définir InfoBubble positionMalheureusement, il n'existe pas une telle option comme pixelOffset dans InfoBubble. Mais si vous voulez juste à se déplacer jusqu'Bulle au-dessus du marqueur dans votre exemple, vous ne devez pas définir carte paramètre à bulle d'initialisation. Considérez les points suivants violon (j'ai corrigé):
http://jsfiddle.net/ssrP9/5/
P. S. Votre violon n'a pas de travail parce que vous hadnt ajouté correctement les ressources
http://doc.jsfiddle.net/basic/introduction.html#add-resources
Je viens de trouver exactement le même problème, mais ne pouvait pas trouver une réponse, n'importe où. À travers un petit essai et d'erreur, j'ai travaillé dessus.
Vous serez en utilisant Google fichier JS pour "infoBubble". Allez dans ce dossier et recherche de...
Pour moi, c'est sur la ligne 203 (mais qui pourrait être le résultat de la précédente, de brassage et de modifications).
Dans cette fonction vous verrez la position "absolue" de la déclaration. Sur une nouvelle ligne, vous pouvez ajouter marginTop, marginRight, marginBottom et le marginleft. Cela va pousser la bulle de sa position par défaut (qui dépend aussi de la position de la flèche de la déclaration dans votre config)...
C'est mon code tweak dans la bulle fichier JS qui des positions de la bulle sur le dessus de la borne (en raison d'une caractéristique de conception)...
Espère que ça aide.
Vous pouvez également utiliser un ancrage définis par la hauteur;
ligne 874 infobubble.js
Dans le InfoBubble buildDom fonction, ajouter:
Maintenant, vous avez une classe CSS pour chaque InfoBubble, vous pouvez le déplacer à l'aide de CSS marge.