类名 util/extend/layer/Popup.js
import * as L from '@mapgis/leaflet'
// @link https://github.com/Raruto/leaflet-rotate
/**
 * L.Popup
 */
const popupProto = L.extend({}, L.Popup.prototype)

L.Popup.include({
  _animateZoom(e) {
    if (!this._map._rotate) {
      popupProto._animateZoom.call(this, e)
    }
    let pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center)
    const anchor = this._getAnchor()

    pos = this._map.rotatedPointToMapPanePoint(pos)

    L.DomUtil.setPosition(this._container, pos.add(anchor))
  },

  _adjustPan() {
    if (
      !this.options.autoPan ||
      (this._map._panAnim && this._map._panAnim._inProgress)
    ) {
      return
    }

    const map = this._map
    const marginBottom =
      parseInt(L.DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0
    const containerHeight = this._container.offsetHeight + marginBottom
    const containerWidth = this._containerWidth
    const layerPos = new L.Point(
      this._containerLeft,
      -containerHeight - this._containerBottom
    )

    layerPos._add(L.DomUtil.getPosition(this._container))

    // var containerPos = map.layerPointToContainerPoint(layerPos);
    // TODO: use popupProto._adjustPan
    const containerPos = layerPos._add(this._map._getMapPanePos())
    const padding = L.point(this.options.autoPanPadding)
    const paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding)
    const paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding)
    const size = map.getSize()
    let dx = 0
    let dy = 0

    if (containerPos.x + containerWidth + paddingBR.x > size.x) {
      // right
      dx = containerPos.x + containerWidth - size.x + paddingBR.x
    }
    if (containerPos.x - dx - paddingTL.x < 0) {
      // left
      dx = containerPos.x - paddingTL.x
    }
    if (containerPos.y + containerHeight + paddingBR.y > size.y) {
      // bottom
      dy = containerPos.y + containerHeight - size.y + paddingBR.y
    }
    if (containerPos.y - dy - paddingTL.y < 0) {
      // top
      dy = containerPos.y - paddingTL.y
    }

    // @namespace Map
    // @section Popup events
    // @event autopanstart: Event
    // Fired when the map starts autopanning when opening a popup.
    if (dx || dy) {
      map.fire('autopanstart').panBy([dx, dy])
    }
  }
})
构造函数
成员变量
方法
事件