leaflet_numbered_markers.js est une suggestion de code javascript faite par Charlie Croom sur son blog, et qui permet d’afficher des marqueurs numérotés sur la librairie leaflet. Il y a malheureusement un bug avec cette mise en œuvre et l’utilisation des événements mouseover et mouseout.

Introduction

Avec la librairie open-source Leaflet qui permet de développer des cartes interactives en Javascript, on est très vite confronté au besoin de numéroter des marqueurs. Pour cela sur l’excellent stackoverflow on trouve trois composants possibles :

La méthode la plus légère et qui s’intègre le mieux avec les marqueurs Leaflet par défaut est la première, malheureusement elle est incompatible avec les événements mouseover et mouseout.

 

Description du bug

Sur les marqueurs, la définitions d’actions sur les événements mouseover et mouseout a pour conséquence de boucler ces deux événements à l’infini. Cela est parfaitement décrit dans d’autres contextes sur stackoverflow : jquery: appending a div causes mouseover/mouseout to loop et jQuery – ToolTip – mouseover & mouseout seem to be firing in loop without mouse movement – hoverintent hasn’t helped.

Boucle entre mouseover et mouseout avec leaflet_numbered_markers.js

Au bout de 234 itérations c’est pénible

De mon coté j’ai illustré le soucis très simplement avec cet exemple de code à ouvrir dans une fenêtre séparée.

La portion problématique de leaflet_numbered_markers.js est très certainement la suivante.

 

Solution

La solution la plus courante dans ce cas consiste à utiliser $.hover ou $.mouseenter en lieu et place de l’évènement « mouseover » mais ce n’est pas facilement réalisable ici.

En ce qui concerne je me contente de ne plus utiliser mouseover avec des marqueurs numérotés, je me contente du clic.

Pour contourner le problème, on peut également utiliser les alternatives citées en introduction…