Suite

Est-il possible de désactiver infowindow mais de conserver l'événement featureClick dans cartodb.js ?

Est-il possible de désactiver infowindow mais de conserver l'événement featureClick dans cartodb.js ?


Je voudrais transmettre les données d'un marqueur dans un événement featureClick() pour effectuer d'autres actions. Cependant, je ne veux PAS qu'une fenêtre d'information ou une info-bulle s'affiche. Je peux assez facilement supprimer l'infowindow/tooltip dans les options de createLayer(), mais cela désactive la fonctionnalité de clic pour un marqueur.

EDIT 1: Il semble que si vous définissez explicitementInteraction(true) pour la sous-couche, l'événement featureClick() se déclenchera, mais le curseur du marqueur ne se transforme pas en pointeur.


Oui, en utilisant lelayer.setIntraction(true)méthode aveclayer.setInteractivity('cartodb_id,awesome_column,other_awesome_column')comme l'exemple en haut de la documentation CartoDB.js :

cartodb.createVis('map', 'http://documentation.cartodb.com/api/v2/viz/2b13c956-e7c1-11e2-806b-5404a6a683d5/viz.json') .done(function(vis, couches) { // la couche 0 est la couche de base, la couche 1 est la couche cartodb // lorsque setInteraction est désactivé featureOver est déclenché couches[1].setInteraction(true); couches[1].on('featureOver', function(e, latlng, pos, data, layerNumber) { console.log(e, latlng, pos, data, layerNumber); }); // vous pouvez faire fonctionner la carte native avec elle var map = vis.getNativeMap(); // maintenant, effectuez toutes les opérations dont vous avez besoin, par exemple en supposant que map est un objet L.Map : // map.setZoom(3); // map.panTo([50.5, 30.5]); });

J'ai fait un exemple de base ici en utilisant l'événement featureOver pour créer des zones de survol personnalisées.


J'ai pensé que je reviendrais et posterais cette réponse car cela pourrait aider quelqu'un d'autre à l'avenir. J'ai eu un problème en deux parties. Interagir avec l'objet de la carte lorsque la fenêtre d'information a été désactivée, ainsi que faire changer le curseur au survol pour indiquer à l'utilisateur que l'objet est cliquable.

Problème 1 : Interagir avec l'objet
Direct et résolu en définissant l'interaction sur true.

layer.setInteraction(true)

Problème 2 : Changer le curseur au survol
Il existe quelques solutions sur le Web qui impliquent la capture de l'événement mouseover et la modification du css div avec jQuery et sont similaires à ci-dessous.

layer.on('mouseover', function() { $('#map").css('cursor', 'pointer'); }); layer.on('mouseout', function() { $('# map").css('cursor', 'auto'); });

Cependant, je pense que cette solution ne fonctionne que pour les cartes Leaflet, qui sont les cartes communes à tous les exemples cartoDb. La solution google est ci-dessous;

layer.on('mouseover', function() { map.setOptions({draggableCursor: 'pointer'}); }); layer.on('mouseout', function() { map.setOptions({draggableCursor: null}); });