Leaflet: adjust popup to picture size

后端 未结 5 1812
有刺的猬
有刺的猬 2021-02-05 12:54

I\'m trying to include pictures in my leaflet popups, but the popup-size doesn\'t adjust to the picture size. I found a solution to this on github:

https://github.com/Le

5条回答
  •  长发绾君心
    2021-02-05 13:13

    Simply specifying maxWidth: "auto" option on the popup seems enough…

    layer.bindPopup(popupContent, {
      maxWidth: "auto"
    });
    

    Demo: http://jsfiddle.net/3v7hd2vx/29/


    EDIT

    Unfortunately, if the image is not loaded yet in browser cache, the popup will open right away with default size, and adjust its size but not its position once the image is fully loaded and displayed. As a result, the popup is shifted and its arrow is misplaced compared to the marker it is bound to.

    A simple workaround is to listen to the image "load" event and to re-open the popup at that moment:

    popupContent = document.createElement("img");
    popupContent.onload = function () {
      layer.openPopup();
    };
    popupContent.src = "path/to/image";
    layer.bindPopup(popupContent, {
      maxWidth: "auto"
    });
    

    Updated demo: http://jsfiddle.net/3v7hd2vx/32/


    EDIT 2

    Here is a more general solution: capture the 's "load" event on all Leaflet popups and force them to update() every time.

    document.querySelector(".leaflet-popup-pane").addEventListener("load", function (event) {
      var tagName = event.target.tagName,
          popup = map._popup; // Currently open popup, if any.
    
      if (tagName === "IMG" && popup) {
        popup.update();
      }
    }, true); // Capture the load event, because it does not bubble.
    

    Demo: https://jsfiddle.net/3v7hd2vx/277/

    Reference: Leaflet issue #5484 (comment)

提交回复
热议问题