IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

StreetView dans un onglet de l'InfoWindow d'un marker sur Google Maps dans un onglet


Sujet :

jQuery

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut StreetView dans un onglet de l'InfoWindow d'un marker sur Google Maps dans un onglet
    Bonjour à tous,

    Ok c'est totalement abscons et j'en suis désolé. Mais le truc est le suivant:

    J'ai dans ma forme "Formulaire" , un onglet dont l'une des pages affiche une Google Maps.
    On ne se décourage pas...
    Au marker positionné sur la Google Maps, est attachée une infoWindow composée d'un onglet. Sur le deuxième onglet, j'affiche la strretView correspondante au LatLong du marker. Enfin j'essaye car c'est là que commence mon problème!

    Mon code sous ready(function) est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    $(document).ready(function()
    	$("#idTab").tabs();
    	$("#idTab").tabs({
    		activate: function(event, ui){	GoogleMap();}	
    	});
     
    function GoogleMap() 
    {	var oDataSQL =  ajaxXHR("setInfo"); 
    	var name  = oDataSQL[0]["NAME"];
    	var latitude  = parseFloat(oDataSQL[0]["LATITUDE"]);
    	var longitude  = parseFloat(oDataSQL[0]["LONGITUDE"]);
    	var id  = "GoogleMaps";
     
    	var latlngMarker = new google.maps.LatLng(latitude, longitude);
     
    	var mapOptions = 
    	{	zoom: 12,
    		center: latlngMarker,
    		mapTypeId: google.maps.MapTypeId.ROADMAP, // Existe d'autre format Ex: HYBRID => Plan sur photo
    		scalecontrol: true,
    		navigationControl: true,
    		maxZoom : 20,
    		navigationControlOptions:{style: google.maps.NavigationControlStyle.SMALL},
    		mapTypeControlOptions:{style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    		streetViewControl: true
    	};	
     
    	var mapID = document.getElementById(id);
    	var map = new google.maps.Map(mapID, mapOptions);   
     
    	var markerOpts =	
    	{	position: latlngMarker,
    		map:map,
    		title: name
    	};
     
    	var marker = new google.maps.Marker(markerOpts);
     
    	var contentInfoWin =
    	[	'<div id="infoWin">',
    			'<div class ="tabs">',
    				'<ul>',
    					'<li><a href="#tab1">Infos</a></li>',
    					 '<li><a href="#tab2" id="SV">Street View</a></li>',
    				'</ul>',
    				'<div id="tab1">' + name + '</div>',
    				'<div id="tab2">',
    					'<div id="pano"></div>',
    				'</div>',
    			'</div>',
    		'</div>'
    	].join('');
     
    	var InfoWinOpts = 
    	{	content  : contentInfoWin,
    		position : latlngMarker
    	};
     
    	var infoWin = new google.maps.InfoWindow(InfoWinOpts);
    	google.maps.event.addListener(marker, 'click', function()
    	{	infoWin.open(map,marker);
    	});
     
    	var panoOpts = {position: marker.position};
    	google.maps.event.addListener(infoWin, 'domready', function()
    	{	$(".tabs").tabs();
    		$('#SV').click(function()
    			{	var panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"),panoOpts);  
    				map.setStreetView(panorama);
    			});
    	});
    C'est ce bout de code qui résiste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	var panoOpts = {position: marker.position};
    	google.maps.event.addListener(infoWin, 'domready', function()
    	{	$(".tabs").tabs();
    		$('#SV').click(function()
    			{	var panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"),panoOpts);  
    				map.setStreetView(panorama);
    			});
    Alors j'ai essayé avec ça mais le patient ne réagit pas plus!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var panoOpts = {position: marker.position};
    	google.maps.event.addListener(infoWin, 'domready', function()
    	{	$(".tabs").tabs();
    		$("#SV").tabs({
    		activate: function(event, ui)
    		{	var panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"),panoOpts);  
    			map.setStreetView(panorama);
    		}	
    	});
    Il y a open web code ici après avoir validé l'accès

    Toute aide est la bienvenue. Merci !


    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 144
Taille : 1,9 Ko

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Je suis pas sûr de ce que j'avance mais peut-être que ça marchera mieux en retirant ce listener sur 'domready', étant donné que tout ça est déjà dans une fonction .ready().
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonjour,
    Citation Envoyé par Watilin
    ... en retirant ce listener sur 'domready', ...
    dans ce cas le 'domready' s'applique à l'infoWindow via le gestionnaire google.maps.event et est donc indépendant de .ready.

    Citation Envoyé par informer
    C'est ce bout de code qui résiste :...
    • pourquoi map.setStreetView(panorama) ?, essaies en mettant en commentaire.
    • à chaque fois que tu ouvres l'infoWindow tu récrées ton StreetViewPanorama et tu rajoutes les événements ?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonjour NoSmoking

    Toujours un plaisir d'échanger avec toi!

    Bon j'ai supprimé la ligne map.setStreetView(panorama) reliquat d'un précédent dév mais pas plus de résultat.

    De plus le code suivant n'est jamais appelé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $("#SV").tabs({
    		activate: function(event, ui)
    		{	var panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"),panoOpts);  
     
    		}
    Dans l'explorateur d'objets NetBeans, voici les infos disponibles. Et SV a cette valeur a#SV.ui-tabs-anchor. Cela pose-t-il un problème?

    Nom : GMaps_SVInfo.png
Affichages : 238
Taille : 59,0 Ko

    Quant à la question 2, je suis preneur de toute meilleure solution.

    Merci encore pour ton aide



    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 132
Taille : 1,9 Ko

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Je me rend compte que ma réponse est incomplète, il manque le fait qu'il faur que tu rendes visible ton StreetViewPanorama celui ci étant construit alors que son conteneur est hidden.

    Quant à la question 2, je suis preneur de toute meilleure solution.
    c'est dans le séquencement qu'il faut traiter le problème.
    A la première ouverture, et uniquement à la première, on crée le StreetViewPanorama et on affecte les événements, une seule fois donc, après on n'a plus rien à gérer.

    Cela pourrait donner en surchargeant l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // création infobulle
    var oInfo = new google.maps.InfoWindow({
        'content'  : contentMarker,
        'idPano'   : idPano,
        'refPano'  : null
      });
    et sur le 'domready'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // attention domready à chaque ouverture de la fenêtre
    google.maps.event.addListener( oInfo, 'domready', function () {
      // garde info du vrai this 
      var thisInfo = this;
      // si 1st, création
      if( ! thisInfo.refPano){
        // active le système d'onglets
        $(".tabs").tabs();      
        //Création d'un street view panorama
        thisInfo.refPano = new google.maps.StreetViewPanorama(
            document.querySelector( '#' +thisInfo.idPano),
            {
                'position' : thisInfo.getPosition()
            }
          );        
        // obligé si la création s'est fait en mode hidden (onglet caché)
        $('.SV').on('click' ,function () {            
          thisInfo.refPano.setVisible(true);
        });
      }
    pour avoir un aperçu du total suit un exemple complet d'une façon de faire
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <title>[Google Maps API]StreetViewPanorama et Tabs Widget</title>
    <meta name="Author" content="NoSmoking">
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    <script src="http://maps.googleapis.com/maps/api/js?language=fr&v=3"></script>
    <style>
    html, body {
            height: 100%;
            margin: 0px; 
            padding: 1em; 
      box-sizing:border-box;
    }
    #div_carte { 
            height:100%;
    }
    .infotext {
      width:480px;
      height:380px;
    }
    .tabs {
      width:450px;
      height:350px;
    }
    .pano {
      width:100%;
      height: 280px;
    }
    </style>
    <script>
    var tMarker = [
      { 'lat' :45.767299, 'lon' : 4.834329, 'title' :'Lyon',      'info' :'<b>Lyon<\/b><br>la suite du texte...'},
      { 'lat' :48.856667, 'lon' : 2.350987, 'title' :'Paris',     'info' :'<b>Paris<\/b><br>la suite du texte...'},
      { 'lat' :44.837368, 'lon' :-0.576144, 'title' :'Bordeaux',  'info' :'<b>Bordeaux<\/b><br>la suite du texte...'},
      { 'lat' :43.297612, 'lon' : 5.381042, 'title' :'Marseille', 'info' :'<b>Marseille<\/b><br>la suite du texte...'}
    ];
    var oMap = null;
     
    function initCarte () {
      // création de la carte
      oMap = new google.maps.Map(document.getElementById("div_carte"),{
        'zoom' : 6,
        'center' : new google.maps.LatLng( 46.80, 1.75),
        'mapTypeId' : google.maps.MapTypeId.ROADMAP
      });
      for( i=0; i < tMarker.length; i++){
        addMarker(tMarker[i]);
      }
    }
     
    function addMarker ( data){
      // get ID unique
      oMap.timeID = oMap.timeID ? ++oMap.timeID :  new Date().getTime();
      var idPano = 'pano' + oMap.timeID;  
      
      // création marker
      oMarker = new google.maps.Marker({
          'position' : {lat: data.lat, lng: data.lon},
          'map' : oMap,
          'title' : data.title
        });    
     
      var contentMarker = [
        '<div class="infotext">', 
          '<div class ="tabs">',
            '<ul>', 
              '<li><a href="#tab1_' +oMap.timeID +'" class="IG">General</a></li>',
              '<li><a href="#tab2_' +oMap.timeID +'" class="SV">Street View</a></li>',
            '</ul>', 
            '<div id="tab1_' +oMap.timeID +'">', 
              '<h3>' + data.title + '</h3>',
              '<p> Coordonnées GPS : ' + oMarker.getPosition().toUrlValue(6)  + '</p>',
              '<p>' + data.info  + '</p>',
            '</div>', 
            '<div id="tab2_' +oMap.timeID +'">',
              '<div class="pano" id="' +idPano +'"></div>', 
            '</div>',
          '</div>',
        '</div>'
      ].join('');
      // création infobulle
      var oInfo = new google.maps.InfoWindow({
          'content'  : contentMarker,
          'idPano'   : idPano,
          'refPano'  : null
        });
     
        // événement clic sur le marker
        google.maps.event.addListener( oMarker, "click", function () {
            // affichage InfoWindow
            if( !oInfo.getMap()){
              oInfo.open( this.getMap(), this);
            }
          });
     
      // attention domready à chaque ouverture de la fenêtre
      google.maps.event.addListener( oInfo, 'domready', function () {
        // garde info du vrai this 
        var thisInfo = this;
        // si 1st, création
        if( ! thisInfo.refPano){
          // active le système d'onglets
          $(".tabs").tabs();      
          //Création d'un street view panorama
          thisInfo.refPano = new google.maps.StreetViewPanorama(
              document.querySelector( '#' +thisInfo.idPano),
              {
                  'position' : thisInfo.getPosition()
              }
            );        
          // obligé si la création s'est fait en mode hidden (onglet caché)
          $('.SV').on('click' ,function () {            
            thisInfo.refPano.setVisible(true);
          });
        }
      });
    }
    google.maps.event.addDomListener(window,'load', initCarte);
    </script>
    </head>
    <body>
      <div id="div_carte"></div>
    </body>
    </html>
    Le code peut être allégé si une seule infoWindow est à gérer, et ce notamment en ce qui concerne les ID.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonsoir NoSmoking,

    Je te remercie pour ces infos que je vais maintenant essayer d'intégrer à mon projet.

    Et que penses tu de ces solutions
    avec une variable globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var pageInitialized = false;
    $(function()
    {  if(pageInitialized) return;
        pageInitialized = true;
        // Put your init logic here.
    });
    Avec one
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     // Fired once when document is ready
            $(document).one('ready', function () {
                  doSomething();
            });
    Je dois charger dans une même page plusieurs fichiers JS avec $(document).ready(function(), cela provoque-t-il un comportement incohérent?Nouveau post: cliquer ici


    Merci encore pour ton aide

    Be seeing youNom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 121
Taille : 1,9 Ko

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Et que penses tu de ces solutions
    avec une variable globale
    ne connaissant pas le contexte d'utilisation disons que je n'en pense rien


    J'ai autre problème, enfin un parmi tant d'autres:
    Autre problème = autre discussion

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonjour NoSmoking,

    La nuit devrait normalement porter conseil, pour moi pas de chance, ça n'a fait que rajouter une pile de questions et notamment sur le DOM et les événements.

    Actuellement j'ai ce code dans le fichier formation.js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $(document).ready(function()
    {
    	/*var idTabOptions =
    	{	show: true,
    		event: 'click',
    		collapsible: false
    	};
    	$("#idTab").tabs(idTabOptions);*/
    	$("#idTab").tabs();
    	$("#idTab").on('tabsactivate', function(event, ui)
    	{
          var index = $("#idTab").tabs('option', 'active');
          switch(index)
          {
             case 1:
                break;
             case 2:
                GoogleMaps('Layer1') ;
                break;
          }
       });
    et dans GMaps.js le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    function GoogleMaps(pID) 
    {	var ajaxXHR = ajaxOutput("setRating");
    	ajaxXHR.success(function (oDataSQL)
    	{	var name  = oDataSQL[0]["NAME"];
    		var latitude  = parseFloat(oDataSQL[0]["LATITUDE"]);
    		var longitude  = parseFloat(oDataSQL[0]["LONGITUDE"]);
    		var id  = "GoogleMaps";
     
    		var latlngMarker = new google.maps.LatLng(latitude, longitude);
     
    		var mapOptions = 
    		{	zoom: 15,
    			center: latlngMarker,
    			mapTypeId: google.maps.MapTypeId.ROADMAP, // Existe d'autre format Ex: HYBRID => Plan sur photo
    			scalecontrol: true,
    			navigationControl: true,
    			maxZoom : 30,
    			navigationControlOptions:{style: google.maps.NavigationControlStyle.SMALL},
    			mapTypeControlOptions:	{style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    			streetViewControl: true
    		};	
     
    		var mapID = document.getElementById(pID);
    		var map = new google.maps.Map(mapID, mapOptions);   
     
    		var markerOpts =	
    		{	position: latlngMarker,
    			map:map,
    			title: name
    		};
     
    		var marker = new google.maps.Marker(markerOpts);
     
    		var contentInfoWin =
    		[	'<div id="infoWin">',
    				'<div class ="tabs">',
    					'<ul>',
    						'<li><a href="#tab1">Infos</a></li>',
    						 '<li><a href="#tab2" id="SV">Street View</a></li>',
    					'</ul>',
    					'<div id="tab1">' + name + '</div>',
    					'<div id="tab2">',
    						'<div id="pano"></div>',
    					'</div>',
    				'</div>',
    			'</div>'
    		].join('');
     
    		var InfoWinOpts = 
    		{	content  : contentInfoWin,
    			position : latlngMarker
    		};
     
    		var infoWin = new google.maps.InfoWindow(InfoWinOpts);
    		google.maps.event.addListener(marker, 'click', function()
    		{	infoWin.open(map,marker);
    		});
     
    		var panoOpts = {position: marker.position};
    		google.maps.event.addListener(infoWin, 'domready', function()
    		{	$(".tabs").tabs();
    			$('#SV').click(function()
    			{	var panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"),panoOpts);  
    			});
    		});
     
    	});//jqXHR.success
    }
    Dans le fameux 2e fichier myDOMready.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $(document).ready(function()
    {	$(document).ajaxStart(function(){
    		//$("#idloading").css({"top" :"1000px", "left": "500px", postion:"absolute"}).show();
    		$("#idloading").show();
    	})
    	.ajaxStop(function(){
    		$("#idloading").hide();
    	});
     
    });
    Pour moi, l'appel à GoogleMaps(pID) se fait seulement sur le clic de l'onglet 2 de $("#idTab"). Or quand je clique sur l'onglet (#SV) de l'infoWindow , ça relance un appel ajax puisque l'image $("#idloading").show() est lancé et donc pas possible d'accéder au StreetView qui s'affiche bien Site en ligne ici - Valider accès -> onglet Localisation2 --> Marker-->InfoWindow-->StreetView

    Là c'est la grande kermesse des événements et j'ai besoin d'une explication de texte.

    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 118
Taille : 1,9 Ko

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Attention :
    tu as un élément "tab" dans un élément "tab" donc lorsque tu cliques sur l'élément "tab" contenu, l'élément "tab" conteneur reçoit l'événement, à cause de la propagation, il te faut donc stopper celle ci via un event.stopPropagation(), ce qui se traduirait dans le code que je t'ai proposé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // obligé si la création s'est fait en mode hidden (onglet caché)
    $('.SV').on('click' ,function (e) {            
      e.stopPropagation();
      thisInfo.refPano.setVisible(true);
    });
    à tester également la propagation suite au click sur le marqueur.

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    J'avais lu des trucs sur ça mais c'était resté un peu vague. Mais maintenant avec ton explication ça devient lumineux.

    Merci pour ton aide toujours aussi précieuse.

    Be seeing you

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonjour NoSmoking

    Pas facile, facile..J'ai implémenté ton code pour l'onglet Localisation 2 ça fonctionne impec Pour tester c'est ici à l'exception de l'affichage du streetView, streetView qui ne demande qu'à rester. Mais il disparait et donc retour à la case départ avec ce problème de propagation même si j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     $('.SV').on('click' ,function () {            
    		e.stopPropagation();
    		thisInfo.refPano.setVisible(true);
          });
    J'ai laissé dans cette version ce bout de code et ne sais pas si cela affecte notablement le comportement de l'onglet pour expliquer la disparition du StreetView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $(document).ready(function()
    {
       var idTabOptions =
       {
          show: true,
          event: 'click',
          collapsible: false
       };
       $("#idTab").tabs(idTabOptions);
    ...
    }
    Merci par avance pour ton aide

    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 120
Taille : 1,9 Ko

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    n'aurais tu pas oublié de mettre l'événement en paramètre pour pouvoir l'utiliser !?
    $('.SV').on('click' ,function (e) {  

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonjour NoSmoking,

    Merci pour cette remarque qui devait être doublée du correctif stopPropogation en stopPropagation . Correction faite !

    J'ai modifié le code pour vérifier que la StreetView s'affiche et chez toi c'est nickel, de mon côté...bof car pas d'image affichée.

    Nom : GMaps_StreetViewPartial.png
Affichages : 303
Taille : 67,4 Ko

    Par contre pas plus de résultat si clique sur le deuxième onglet !!!!

    C'est et ça donne envie de


    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 119
Taille : 1,9 Ko

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonsoir NoSmoking,

    Si la surcharge de l'infoWindow reste encore un peu nébuleux, c'est surtout l'affichage incomplet de ma streetView qui reste un véritable mystère pour moi (Onglet Localisation3)

    Pour tester l'affichage de la streetView, j'ai modifié le code pour qu'elle s'affiche dans le 1er onglet de l'infoWindow et éviter le problème de propagation.

    Je te serais particulièrement reconnaissant si tu pouvais m'expliquer pourquoi mon code affichage que partiellement la streetView

    Be seeing you!Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 112
Taille : 1,9 Ko

  15. #15
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Après analyse du fonctionnement de tabs il ressort que la propagation à bien lieu, mais tu t'en ais rendu compte

    Le stopPropagation doit être placé en fait dans la partie code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.tabs').on('tabsactivate', function(event, ui){
        event.stopPropagation();
      });
    pour être éfficace, code qu'il faut donc ajouter à ton code.

    Le fautif dans tout cela est ta façon de récupérer l'onglet cliqué au niveau de la tabs initiale/principale, c'est ce morceau de code qui te pourri la vie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          var index = $("#jQueryTabs1").tabs('option', 'active');
          switch(index)
          {
             case 1:
                initMaps();
                break;
          }
    il serait donc préférable que tu change ta méthode de récupérartion en mettant par exemle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $("#jQueryTabs1").on('tabsactivate', function(event, ui) {
        var divPanel = ui.newPanel[0];
        if( divPanel.id === 'id_onglet_tabs_principale'){                
          if( !oMap){
            initMaps();
          }
        }
      });
    comme cela tu t’affranchis de la propagation.

    Voilà rapidement la situation.
    PS : en fait il n'y a qu'une instance tabs.

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonjour NoSmoking

    Avec ta nouvelle approche, ça fonctionne impec

    On peut le tester sur le site Ici la propagation ne passera pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $("#jQueryTabs1").on('tabsactivate', function(event, ui) {
        var divPanel = ui.newPanel[0];
        if( divPanel.id === 'id_onglet_tabs_principale'){                
          if( !oMap){
            initMaps();
          }
        }
      });
    Maintenant je vais tenter de voir comment ça fonctionne dans mon projet principal...

    Encore un grand merci pour toute ton aide

    PS: Si j'osais... bon Ok, j'ose, pourrais-tu m'expliquer pourquoi il faut intégrer le stopPropagation sous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.tabs').on('tabsactivate', function(event, ui){
        event.stopPropagation();
      });

  17. #17
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Avec ta nouvelle approche, ça fonctionne impec
    dans l'exemple que tu fournis je ne trouve pas mais peut être à tu modifier la source !

    pourrais-tu m'expliquer pourquoi il faut intégrer le stopPropagation sous
    il suffit de "tracer" la suite des événements pour voir que

    Lors du click sur l'onglet "Street View", de la TABS_ENFANT, celle de ta carte affichée

    • la div correspondante est rendue visible et la TABS_ENFANT reçoit un évènement tabsactivate, signifiant que l'élément est prêt et disponible
    • cet événement se propage à la TABS_PARENT qui reçoit donc également le tabsactivate, à noter que c'est le même ui.newPanel qui est transmit, on pourrait donc tout gérer au niveau de la TABS_PARENT.
    • ensuite et ensuite seulement l'événement click parvient à l'élément cliqué, soit l'onglet "Street View".

    Il est donc nécessaire de stopper la propagation au plus haut donc sur la TABS_ENFANT.

    Il en résulte que la gestion via l'option 'active', comme fait initialement, est piégeuse car redescendant d'un cran.

    Je te propose de même ne pas gérer cela via l'ID de la DIV, toujours source potentielle d'erreur, et qui s'affiche via ui.newPanel[0] mais en utilisant les data.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
      var contentMarker = [
        '<div class="infotext">', 
          '<div class ="tabs">',
            '<ul>', 
              '<li><a href="#tab1_' +oMap.timeID +'" class="IG">General</a></li>',
              '<li><a href="#tab2_' +oMap.timeID +'" class="SV">Street View</a></li>',
            '</ul>', 
            '<div data-role="info" id="tab1_' +oMap.timeID +'">',             // ajout d'un data-role = info
              '<h3>' + data.title + '</h3>',
              '<p> Coordonnées GPS : ' + oMarker.getPosition().toUrlValue(6)  + '</p>',
              '<p>' + data.info  + '</p>',
            '</div>', 
            '<div data-role="pano" id="tab2_' +oMap.timeID +'">',            // ajout d'un data-role = pano
              '<div class="pano"></div>', 
            '</div>',
          '</div>',
        '</div>'
      ].join('');
    et de gérer cela plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $('.tabs').on('tabsactivate', function(event, ui){
        event.stopPropagation();
        var divPanel = ui.newPanel[0];
        if( $( divPanel ).data( 'role') === 'pano'){       // récup. et test de l'élément concerné        
          thisInfo.refPano.setVisible(true);
        }
      });
    tu peux donc purement et simplement virer la gestion du click soit les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.SV').on('click' ,function () { 
       thisInfo.refPano.setVisible(true);
    });
    Je ne sais pas si cela est plus clair maintenant.

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonsoir NoSmoking,

    Non seulement tu as toute ma reconnaissance mais également mon admiration

    Je ne peux que te remercier une nouvelle et énième fois pour ton aide et tes excellentes explications.

    Et j'ai comme l'impression que comme pour les séries il y ara un To be continued


    C'est par ici la démo avec l'intégration de ton code. Tic tac tic tac...

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bon le problème avec un novice comme moi, c'est que toute explication suscite une tera-flopée de questions subsidiaires.

    Aurais-tu un lien vers une tutoriel expliquant comment et avec quoi suivre les événements. Tu penses que dans NetBeans ça le fait?

    Voilà quand je te disais To be continued, pas attendu longtemps

    Merci encore et bonne soirée

  20. #20
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Le plus simple reste de suivre avec un console.log bien senti.

    Exemple avec la structure suivante
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div>
      <p>
        Action : <button>Bouton</button>
      </p>
    </div>
    et le code simpliste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var oDiv  = document.querySelector('DIV'),
        oPara = document.querySelector('P'),
        oBtn  = document.querySelector('BUTTON');
    oDiv.onclick = oPara.onclick = oBtn.onclick = function(e){
      console.log('Event ' +e.type +' sur : ' +this.tagName);
    };
    il suffit de regarder ce qui est affiché dans la console (F12), on devrait y voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Event click sur : BUTTON
    Event click sur : P
    Event click sur : DIV
    Donc pas forcément de tutoriel mais plutôt de la curiosité

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. intégration Google map dans access
    Par pkrvz dans le forum Contribuez
    Réponses: 12
    Dernier message: 23/12/2009, 22h44
  2. Décalage div (Google Maps) dans un div
    Par paradise dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 14/01/2009, 14h54
  3. Comment obtenir Google Maps dans une Form ?
    Par thibouille dans le forum Web & réseau
    Réponses: 16
    Dernier message: 13/01/2009, 14h30
  4. Itérer sur une map dans une jsp
    Par jplesire dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 02/07/2008, 14h41
  5. Integrer google maps dans une application
    Par La Truffe dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 01/11/2006, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo